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.