Übergabe von Parametern an JQuery .trigger

82

Ich verwende den JQuery-Trigger, bin mir aber nicht sicher, wie die richtige Syntax zum Übergeben von Parametern in meiner Situation lautet. Hier rufe ich an:

$('#'+controlName).trigger(event);

Hier mache ich die Ereignisbindung:

$(window).on('onPartialRendered', onPartialRendered);

Und hier ist mein Event-Handler:

var onPartialRendered = function () {

    .....
};

Alles funktioniert gut, bis ich versuche, Parameter zu übergeben. Was wäre der richtige Weg, um es gemäß meinem Beispiel zu tun?

user517406
quelle
Ja, ich habe versucht, Parameter mit dem Syntax-Trigger (Ereignis, ['Param1', 'Param2']) zu übergeben, aber ohne Erfolg
user517406
Ihr onPartialRenderedhat keine Parameter in seiner Signatur. Es sollte sein onPartialRendered = function(e, p1, p2).
Rocket Hazmat
@ user517406 Wie haben Sie versucht, die Parameter zu übergeben, die nicht funktionierten?
Epascarello
@ user517406 versuche einen Code in jsfiddle.net zu posten, mit dem wir spielen können.
Edper

Antworten:

151

Der erste Parameter ist immer eine Zeichenfolge mit dem Ereignisnamen und die nächsten Parameter sind zusätzliche Daten:

.trigger('foo', [1, 2]);

.on('foo', function(event, one, two) { ... });

Besonderer Dank für Rocket Hazmat

Beispiel:

var controller = {
  listen: function (event, json, string) {}
};

$('body').trigger('this_works', [{data: [1, 2, 3]}, 'something']);

$('body').on('this_works', function (event, json, string) {
  controller.listen(event, json, string);
});

Remote partiell:

Bitte nicht auf diese Weise verwenden. Es gibt viele Artikel über dieses Problem im Netzwerk. Dies nimmt viel Zeit in Anspruch und erzeugt unnötigen Datenverkehr im Netzwerk. Bitte benutzen Sie diesen Weg:

var template = $('#templates #example_template').detach();
var clone = template.clone();
clone.find('.some_field').val('new_data');
clone.attr('id', null);
$('table tbody').append(clone);
Eraden
quelle
11
Nicht ganz. .triggernimmt nur 2 Argumente. Sie müssen ein Array (oder Objekt) von Parametern übergeben.
Rocket Hazmat
Was wäre die richtige Syntax, wenn ich die Ereignisbindung wie in meinem Beispiel vom Ereignishandler trennen möchte?
user517406
Können Sie bitte ein Syntaxbeispiel angeben? Die Verwendung dieser Syntax funktioniert nicht: EVENT BINDING $ (Fenster) .on ('onPartialRendered', onPartialRendered (p1, p2)); EVENT HANDLER var onPartialRendered = Funktion (p1, p2) {...}
user517406
2
@ user517406 Das ist völlig falsch, um eine Funktionsreferenz als Ereignishandler zu übergeben. Fügen Sie die Parameter , wo Sie definieren die Funktion. var onPartialRendered = function (event,one,two) {
Kevin B
2
Ändern Sie einfach den Auslöser in: $ ('body'). Trigger ({Typ: 'this_works', Daten: [1,2,3], Nachricht: 'etwas'});. Der Handler kann immer noch nur eine Funktion (Ereignis) enthalten und die Parameter durch Angabe von event.data und event.message abrufen.
Linnium