JQuery .trigger'da parametreleri aktarma


82

JQuery tetikleyicisini kullanıyorum ancak benim durumumda parametreleri geçirmek için doğru sözdiziminin ne olduğundan emin değilim. İşte aramayı yaptığım yer:

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

İşte olay bağlamayı yaptığım yer:

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

Ve işte olay işleyicim:

var onPartialRendered = function () {

    .....
};

Parametreleri aktarmaya çalışana kadar her şey yolunda gidiyor. Örneğime göre bunu yapmanın doğru yolu ne olabilir?


Evet, orada tetikleme sözdizimini kullanarak parametreleri geçirmeyi denedim (olay, ['Param1', 'Param2']) ancak başarılı olamadı
user517406

İmzasında onPartialRenderedherhangi bir parametreniz yok. Olmalı onPartialRendered = function(e, p1, p2).
Rocket Hazmat

@ user517406 çalışmayan parametreleri nasıl geçirmeye çalıştınız?
epascarello

@ user517406 oynamamız için jsfiddle.net'e bazı kodlar göndermeyi deneyin.
Edper

Yanıtlar:


152

İlk parametre her zaman olay adını içeren dizedir ve sonraki parametreler ek verilerdir:

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

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

Rocket Hazmat için özel teşekkürler

Misal:

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

Uzaktan kısmi:

Lütfen bu şekilde kullanmayın. Ağda bu sorunla ilgili birçok makale var. Bu çok zaman alır ve ağda gereksiz trafik oluşturur. Lütfen şu şekilde kullanın:

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
Pek değil. .triggersadece 2 argüman alır. Bir dizi (veya nesne) parametre aktarmanız gerekir.
Rocket Hazmat

Olay bağlamayı, örneğimdeki gibi olay işleyiciden ayırmak istersem doğru sözdizimi ne olurdu?
user517406

Lütfen bir sözdizimi örneği verebilir misiniz, bu sözdizimini kullanmak işe yaramaz: EVENT BINDING $ (window) .on ('onPartialRendered', onPartialRendered (p1, p2)); OLAY İŞLEMCİSİ var onPartialRendered = function (p1, p2) {...}
user517406

2
@ user517406 Bu, bir olay işleyicisi olarak bir işlev başvurusunu iletmenin tamamen yanlış bir yoludur. Fonksiyonu tanımladığınız parametreleri ekleyin . var onPartialRendered = function (event,one,two) {
Kevin B

2
Tetikleyiciyi basitçe şu şekilde değiştirin: $ ['body']. Trigger ({type: 'this_works', data: [1,2,3], message: 'something'}) ;. İşleyicide hala yalnızca işlev (olay) olabilir ve olay.data ve olay.message belirterek parametreleri alabilir.
linnium
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.