jQuery binden und lösen das Ereignis mit Parametern

8

Ich versuche, ein Ereignis an ein textbox zu binden, das Parameter enthält. Das folgende Keep sieht aus, als ob es es tun sollte, aber jedes Mal, wenn die Seite geladen wird, wird es ausgeführt.

%Vor%

Das Ereignis wird mit diesem Parameter jedes Mal aufgerufen, wenn die Seite geladen wird. Dies funktioniert möglicherweise nicht, da Ereignisse mit Parametern nicht unterstützt werden. Wenn ja, gibt es eine andere Route?

    
Paul Knopf 17.11.2009, 18:53
quelle

5 Antworten

10

Um eine Funktion zu binden, die Parameter verwendet, verwenden Sie eine anonyme Funktion, um die Parameter zu schließen.

%Vor%

Ihr Beispiel führt die Funktion EventWithParam aus und versucht dann, an das Ergebnis dieses Funktionsaufrufs zu binden.

Wenn unbind ohne Angabe einer Funktion aufgerufen wird, werden alle Handler für den angegebenen Ereignistyp (einschließlich der anonymen Funktion) freigegeben. . Wenn Sie diese Funktion spezifisch lösen wollen, müssen Sie ihr einen Namen wie folgt geben:

%Vor%     
bdukes 17.11.2009, 19:00
quelle
11

Sie können Ereignisparameter als zweite Argumente an bind () übergeben. Es sind keine direkten Callback-Parameter, aber vielleicht möchten Sie es verwenden:

Aus der jQuery-Dokumentation: binden

%Vor%     
jsonx 11.01.2010 18:13
quelle
4

bdukes ist genau richtig. Ich füge meine Antwort hinzu, da ich kürzlich etwas interessantes gefunden habe, was mit jQuerys bind / unbind-Funktion und anonymen Funktionen, seinen Ereignisnamenräumen, zu tun hat. Wie oben gezeigt, wird das Bindungsereignis wie folgt aufgerufen:

jQuery('#textbox').bind('click',function(){EventWithParam('param')});

Um das zu lösen, muss auch der Benutzer anrufen ...   jQuery('#textbox').unbind('click');

Im Endeffekt werden alle onClick-Ereignisse entfernt.

Jetzt kommt in jQuery Namensräumen. Wenn Sie eine anonyme Funktion haben, die Sie an das click -Ereignis anhängen möchten und später losbinden, tun Sie dies wie folgt.

jQuery('#textbox').bind('click.yourNameSpace',function(){EventWithParam('param')});

Dann, um die Bindung zu lösen, rufen Sie die Unbind-Funktion wie folgt auf.

jQuery('#textbox').unbind('click.yourNameSpace');

Der Rest Ihrer onClick-Ereignisse bleibt erhalten.

    
Sam R 11.01.2010 18:03
quelle
1

Der Grund ist, dass EventWithParam als Funktion direkt in Ihrer Bindung aufgerufen wird. Anders ausgedrückt: Sie binden das Click-Ereignis an das -Ergebnis des Aufrufs von EventWithParam('param') . Das sollte funktionieren:

%Vor%

Jetzt haben Sie die even an eine Funktion gebunden, die, wenn das Ereignis ausgelöst wird, EventWithParam('param')

aufruft     
Dan 17.11.2009 19:01
quelle
0
%Vor%     
Tommaso Taruffi 17.11.2009 19:03
quelle

Tags und Links