Передача параметрів на JQuery .trigger


82

Я використовую тригер JQuery, але не впевнений, яким є правильний синтаксис для передачі параметрів у моїй ситуації. Ось де я телефоную:

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

Ось де я роблю прив'язку події:

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

І ось мій обробник подій:

var onPartialRendered = function () {

    .....
};

Все працює нормально, поки я не спробую передати параметри. Яким буде правильний спосіб зробити це, як на моєму прикладі?


Так, я спробував передати параметри, використовуючи синтаксис там тригера (подія, ['Param1', 'Param2']), але безуспішно
user517406

У вашому onPartialRenderedпідписі немає жодних параметрів. Це повинно бути onPartialRendered = function(e, p1, p2).
Racket Hazmat

@ user517406 як ти намагався передати параметри, які не працювали?
epascarello

@ user517406 спробуйте опублікувати якийсь код у jsfiddle.net, щоб ми могли з ним пограти.
Edper

Відповіді:


152

Перший параметр - це завжди рядок з назвою події, а наступні параметри - це додаткові дані:

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

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

Особлива подяка за Rocket Hazmat

Приклад:

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

Віддалене часткове:

Будь ласка, не використовуйте цей спосіб. У мережі є багато статей про цю проблему. Це займає багато часу і створює непотрібний трафік в мережі. Будь ласка, використовуйте такий спосіб:

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

11
Не зовсім. .triggerбере лише 2 аргументи. Вам потрібно передати масив (або об’єкт) параметрів.
Ракета Хазмат,

Яким би був правильний синтаксис, якби я хотів відокремити прив'язку події від обробника подій, як у моєму прикладі?
user517406

Ви можете навести приклад синтаксису, оскільки використання цього синтаксису не працює: EVENT BINDING $ (window) .on ('onPartialRendered', onPartialRendered (p1, p2)); ОБРОБНИК ПОДІЙ var onPartialRendered = функція (p1, p2) {...}
user517406

2
@ user517406 Це абсолютно неправильний спосіб передавати посилання на функцію як обробник подій. Додайте параметри, де ви визначаєте функцію. var onPartialRendered = function (event,one,two) {
Kevin B

2
Просто змініть тригер на такий: $ ('body'). Trigger ({type: 'this_works', data: [1,2,3], message: 'something'}) ;. Обробник все ще може просто мати в ньому функцію (подію) і отримати параметри, вказавши event.data та event.message.
linnium
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.