63 Stimmen

jQuery-Funktion zu bestimmten Elementen hinzufügen

Ich weiß, dass Sie neue jQuery-Funktionen hinzufügen können, indem Sie $.fn.someFunction = function()

Ich möchte jedoch nur zu bestimmten Elementen Funktionen hinzufügen. Ich habe diese Syntax ausprobiert, aber sie funktioniert nicht $('.someElements').fn.someFunction = function()

Ich möchte dies tun, damit ich die Funktion irgendwo im Code wie folgt aufrufen kann $('someElements').someFunction();

0 Stimmen

Ich bin mir nicht sicher, ob dies überhaupt möglich ist, aber wenn es so wäre, warum sollten Sie Ihren Code verkrüppeln wollen? Wenn Sie es auf bestimmte Selektoren beschränken wollen, verwenden Sie diese Selektoren. Oder, cache das Ergebnis von $('.someElements') und rufen die Funktion als diese Variable plus .someFunction() später.

0 Stimmen

Das Problem ist, dass es $(...).fn nicht gibt, nur $.fn. Und das Setzen von $(...).someFunction hat nicht denselben Effekt, weil es nicht auf jedem Element in seinem eigenen Kontext ausgeführt wird.

0 Stimmen

@Robert Ich weiß nicht, warum der OP das wollte, aber ich möchte Funktionen an Elemente binden, so dass die aufrufende Funktion nicht zwischen den Elementen unterscheiden muss. Ich habe mehrere Feldtypen, von denen jeder seine eigene Validierungsmethode aufruft - da mein AJAX-Aufruf größtenteils repliziert, was das Formular ohne AJAX tut, ist es sinnvoll, eine einzelne Funktion zu schreiben, die die Validierungsfunktion aufrufen könnte, und dann nur das Attribut name und den Wert zu verwenden, um die POST-Daten aufzubauen, die gesendet würden, wenn ich die HTML-Schaltfläche "Submit" verwenden würde. Es scheint einfach mehr OOP auf diese Weise.

8voto

charltoons Punkte 1833

Ich hatte eigentlich diesen Anwendungsfall auch, aber mit einem Cache-Objekt. Ich hatte also bereits ein jQuery-Objekt, ein umschaltbares Menü, und ich wollte zwei Funktionen an dieses Objekt anhängen, "open" und "close". Die Funktionen mussten den Geltungsbereich des Elements selbst beibehalten, und das war alles. this das Menüobjekt sein. Wie auch immer, Sie können einfach Funktionen und Variablen hinzufügen, wie bei jedem anderen Javascript-Objekt auch. Manchmal vergesse ich das.

var $menu = $('#menu');
$menu.open = function(){
   this.css('left', 0);
   this.is_open = true; // you can also set arbitrary values on the object
};
$menu.close = function(){
   this.css('left', '-100%');
   this.is_open = false;
};

$menu.close();

0 Stimmen

Das ist eine großartige Möglichkeit, damit umzugehen. Dies ist besonders dann nützlich, wenn Sie dem DOM etwas hinzugefügt haben (z. B. ein Pop-over-Fenster) und Sie möchten, dass die Funktionen nur für dieses eine DOM-Element vorhanden sind. Wenn Sie später das Pop-over-Fenster entfernen, verschwinden die Funktionen zusammen mit ihm. Sie könnten es auch so machen: $('#menu')[0].open = function(){ ... }; So können Sie in einem Schritt einen Griff erhalten und ihm eine beliebige Funktion zuweisen.

2voto

Snegh Punkte 21

Die naheliegendste Lösung ist die Zuweisung einer Funktion als Eigenschaft des Objekts:

obj.prop("myFunc", function() {
  return (function(arg) {
    alert("It works! " + arg);
  });
});

Rufen Sie es dann auf diese Weise auf dem Objekt auf:

obj.prop("myFunc")("Cool!");

Hinweis: Ihre Funktion ist der Rückgabewert der äußeren Funktion, siehe: http://api.jquery.com/prop/#prop-propertyName-function

1voto

Carls Jr. Punkte 3068

Ich bin mir auch nicht sicher, ob meine Antwort Ihnen helfen wird, aber wie wäre es mit .live?

$(selector).live(click,function(){
    //some codes here
});

-1voto

dsk Punkte 575

Ich habe dies getan und es funktioniert gut.

 function do_write(){
     $("#script").append("<script> $(\'#t"+(id_app+4)+"\').change(function(){  alert('Write Your Code here');    });<\/script>");
     console.log("<script> $(\'#t"+(id_app+4)+"\').change(function(){  alert('hello');    });<\/script>");
}

und rufen Sie eine Funktion aus Ihrer dynamischen Funktion auf, die ein dynamisches Steuerelement in HTML erstellt

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X