Beliebige jQuery-Funtion mit Link auslösen

TIMS_Ralf

Erfahrenes Mitglied
Hallo allseits
... und erstmal sorry: Hatte die Frage unter https://www.tutorials.de/threads/link-mit-jquery-click-ausloesen.399515/#post-2063192 schon mal gestellt, habs dann aber aus Auge und Sinn verloren.
Und irgendwie hat man mich auch falsch verstanden - Die Frage nochmal präziser gestellt:

Ich möchte eine Funktion, die eine X-BELIEBIGE jQuery-Funktion mit einem Link startet. Also egal, ob ein Akkordeon, ein Panel, ein Slider et. pp. ....: Der Link kann sonst wo auf der Seite stehen und soll das gleiche auslösen, was ich auch mit Click (Start) auf das jeweilie PlugIn auslösen würde.

Am Beispiel case 2: Mit Click auf
HTML:
 <A HREF="javascript:starte_jQueryPlugIn(2)" ID="Akkordeon_Link">
soll sich das Akkordeon so öffnen, wie es im Plugin definiert ist - also so, als hätte ich das DIV des Akkordeons angeclickt.

Javascript:
 // Kurzes jQuery-PlugIn für Akkordeon (Beispiel)
  $('.AkkHdCl').not('.AkkHdOp').next('.DvAkkDt').hide();
  $('.AkkHdCl').click( function()
{
   var DvObj = $(this);
   if( DvObj.hasClass('AkkHdOp') ) // akkDt ist offen
  {
    DvObj.next('.DvAkkDt').slideToggle(1000);
    DvObj.removeClass('AkkHdOp').addClass('AkkHdCl');
  }
  else // akkDt ist zu
  {
    $('.AkkHdOp').next('.DvAkkDt').slideToggle('slow');
    $('.AkkHdOp').removeClass('AkkHdOp');
    DvObj.next('.DvAkkDt').slideToggle(2000);
    DvObj.addClass('AkkHdOp');
  };
  return false;
});

// Wie ich es mir dachte, es aber nicht funktioniert:
function starte_jQueryPlugIn( jQuery_PlugInNr )
{
switch( jQuery_PlugInNr )
{
  case 1:
  $("#Panel_Link").click(function() // ID des Links auf der WEB-Seite
  {
  $("#Panel_Tab").click();  // Soll Click auf Panel-DIV simulieren und Code des Panels ausführen
  });
  break;
  case 2:
  $("#Akkordeon_Link").click(function() // ID des Links auf der WEB-Seite
  {
  $('.AkkHdCl').click();  // Soll Click auf Akkordeon-DIV simulieren und Code des Panels ausführen
  });
  break;
  case 3:
  $("#Slider_Link").click(function() // ID des Links auf der WEB-Seite
  {
  $("#Slider_Image").click();  // Soll Click auf Image simulieren und Code des Panels ausführen
  });
  break;
  // sonstige Plugins.....
  default
   alert("falsche jQuery_PlugInNr = " + jQuery_PlugInNr );
}
}

Das ganze soll allgemeingültig, also von den jQuery-Plugins unabhängig sein. Dass ich die Plugins ggf. anpassen muß ist natürlich klar.

Danke vorab!
 
Zuletzt bearbeitet:
Hallo Ralf,

das Problem liegt bei deiner Simulation des Klicks.
Momentan schaut das so aus (im Switch-Statement, case 2):
Javascript:
$("#Akkordeon_Link").click(function() // ID des Links auf der WEB-Seite
{
  $('.AkkHdCl').click();  // Soll Click auf Akkordeon-DIV simulieren und Code des Panels ausführen
});

Dies definiert einen neuen Click-Eventhandler für #Akkordeon_Link. Wenn nun ein Klick auf das Element ausgelöst wird (z. B. durch den Nutzer), dann wird ein Klick auf .AkkHdCl simuliert.

Solange du aber nicht als Nutzer auf #Akkordeon_Link klickst (oder ein Klick darauf simulierst), passiert nichts!

Was du wahrscheinlich haben willst, ist Folgendes:
Javascript:
$('.AkkHdCl').click();


PS: Wieso willst du eine Funktion für alles haben? Wenn man "jQueryPlugIn(2)" liest, dann weiß man nicht, was passiert. Das ist sehr schlecht IMHO.
 
Hallo ComFreak,
erstmal vielen Dank...

Ja, haddu natürlich recht: mit "$('.AkkHdCl').click();" würde es prinzipiell funktionieren, analog auch mit anderen Link-Simulationen von jQuery. Sobald ich aber mehrere Objekte (hier: Akkordeons) habe, dann nicht mehr - bzw. es würden sich alle Akkordeons öffnen / schließen, bzw. es passiert gar nix.
Bei anderen PlugIns wirds noch komplizierter... z.B. einem Kalender für ein Datumsfeld...

Äääh... was meinst Du mit "IMHO" und mit "wenn man .... liest, weiß man nicht was passiert"? Die Scripts braucht doch keine lesen :)
 
..... ooooh neee.... ich habs. Grad als ich Dir antwortete... könnt mich grad selbst ohrfeigen... sollte ich auch tun.

Der Link braucht nur die ID des Objekts, die dann die Funktion startet, die darunter registriert ist.
HTML:
<A ONCLICK="$('#AkkHdObj1).click();">Akk 1</A>
 
Eine gängige Abkürzung für "In my humble opinion" (dt. meiner [bescheidenen] Ansicht nach).

Die Scripts braucht doch keine lesen :)
Na, so weit würde ich mich nicht aus dem Fenster lehnen. Du möchtest sie vielleicht in ein paar Wochen/Monaten/Jahren erweitern und fragst dich dann, was dies oder jenes heißt, weil es aus dem Code selbst nicht ganz hervorgeht.

Bei dem letzten Code von dir fehlt ein einfaches Anführungszeichen vor der schließenden runden Klammer.
 
:) "Deine bescheidene Ansicht" hat mir hier schon öfter geholfen... So bescheiden finde ich die gar nicht. Immer auf den Punkt und Du erkennst und gehst auch auf das Problem ein. Ich bin schon bescheidene 51 Jahre alt... da kennt man diese Chatteritis-Begriffe nicht ;)

Naja, hab mal Informatik an ner TH studiert... also Codes dokumentieren und später noch lesen können, haben wir schon damals gelernt, sogar noch echte Maschinensprache (Assembler - falls das noch jemand kennt). Bei meinen eigenen Codes kann ich mich weit ausm Fenster lehnen... Hast damit aber natürlich recht!
Ich steh mir meistens selbst auf den eigenen Füßen und frag mich dann, warum ich nicht vorankomme... das berühmte "Brett vorm Kopp", den Wald vor lauter Bäumen nicht mehr sehen... ;)

VIELEN DANK - auch mal ganz grundsätzlich an Dich!
Ralf
 
Danke für die netten Worte.

Klar kennt man noch Assembler, ist allerdings bei Weitem nicht mein Fachgebiet ;)
 

Neue Beiträge

Zurück