Przekazywanie parametrów w JQuery .trigger

82

Używam wyzwalacza JQuery, ale nie jestem pewien, jaka jest prawidłowa składnia do przekazywania parametrów w mojej sytuacji. Oto, gdzie dzwonię:

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

Oto, gdzie robię oprawę wydarzenia:

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

A oto moja obsługa zdarzeń:

var onPartialRendered = function () {

    .....
};

Wszystko działa dobrze, dopóki nie spróbuję przekazać parametrów. Jaki byłby właściwy sposób na zrobienie tego na moim przykładzie?

user517406
źródło
Tak, próbowałem przekazać parametry przy użyciu wyzwalacza składni (zdarzenie, ['Param1', 'Param2']), ale bez powodzenia
user517406
Twój onPartialRenderednie ma żadnych parametrów w swoim podpisie. Tak powinno być onPartialRendered = function(e, p1, p2).
Rocket Hazmat
@ user517406 jak próbowałeś przekazać parametry, które nie działały?
epascarello
@ user517406 spróbuj wysłać kod w jsfiddle.net, abyśmy mogli się nim bawić.
Edper

Odpowiedzi:

152

Pierwszy parametr to zawsze ciąg znaków z nazwą zdarzenia, a kolejne parametry to dodatkowe dane:

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

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

Specjalne podziękowania dla Rocket Hazmat

Przykład:

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);
});

Zdalne częściowe:

Proszę nie używać w ten sposób. Jest wiele artykułów na temat tego problemu w sieci. Zajmuje to dużo czasu i generuje niepotrzebny ruch w sieci. Proszę używać w ten sposób:

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
źródło
11
Nie do końca. .triggerprzyjmuje tylko 2 argumenty. Musisz przekazać tablicę (lub obiekt) parametrów.
Rocket Hazmat
Jaka byłaby poprawna składnia, gdybym chciał oddzielić powiązanie zdarzenia od obsługi zdarzeń, jak w moim przykładzie?
user517406
Czy możesz podać przykład składni, użycie tej składni nie działa: WIĄZANIE ZDARZEŃ $ (okno) .on ('onPartialRendered', onPartialRendered (p1, p2)); EVENT HANDLER var onPartialRendered = function (p1, p2) {...}
user517406
2
@ user517406 To całkowicie niewłaściwy sposób przekazywania odwołania do funkcji jako procedury obsługi zdarzenia. Dodaj parametry tam, gdzie definiujesz funkcję. var onPartialRendered = function (event,one,two) {
Kevin B
2
Po prostu zmień wyzwalacz na ten: $ ('body'). Trigger ({type: 'this_works', data: [1,2,3], message: 'something'}) ;. Procedura obsługi może nadal mieć w sobie funkcję (zdarzenie) i pobierać parametry, podając zdarzenia event.data i event.message.
linnium