Как я могу передать параметры обработчиков событий в jQuery?


С кодом jQuery, например:

$("#myid").click(myfunction);

function myfunction(arg1, arg2) {/* something */}

Как передать аргументы в myfunction при использовании jQuery?

6 80

6 ответов:

самый простой способ-сделать это так (предполагая, что вы не хотите, чтобы какая-либо информация о событии передавалась функции)...

$("#myid").click(function() {
    myfunction(arg1, arg2);
});

jsFiddle.

это создает анонимную функцию, которая вызывается, когда click событие срабатывает. Это в свою очередь вызовет myfunction() с аргументами, которые вы предоставляете.

если вы хотите сохранить ThisBinding (стоимость this при вызове функции установите значение элемент, который вызвал событие), затем вызовите функцию с call().

$("#myid").click(function() {
    myfunction.call(this, arg1, arg2);
});

jsFiddle.

вы не можете передать ссылку непосредственно так, как указано в вашем примере, или ее единственным аргументом будет jQuery event объект.

если вы do хотите передать ссылку, вы должны использовать jQuery по proxy() функция (которая является кросс-браузерной оболочкой для Function.prototype.bind()). Это позволяет передавать аргументы, которые связаны до the

$("#myid").on('click', {arg1: 'hello', arg2: 'bye'}, myfunction);

function myfunction(e) {

    var arg1 = e.data.arg1;
    var arg2 = e.data.arg2;

    alert(arg1);
    alert(arg2);

}

//call method directly:
myfunction({
    arg1: 'hello agian', 
    arg2: 'bye again'
});

также позволяет связывать и отменять определенные обработчики событий с помощью методов включения и выключения.

пример:

$("#myid").off('click', myfunction);

это приведет к отмене привязки обработчика myfunction от #myid

хотя вы, безусловно, должны использовать ответ Алекса, метод "привязки" библиотеки прототипов был стандартизирован в Ecmascript 5 и вскоре будет реализован в браузерах изначально. Это работает следующим образом:

jQuery("#myid").click(myfunction.bind(this, arg1, arg2));

старый поток, но для целей поиска; попробуйте:

$(selector).on('mouseover',...);

... и проверьте параметр " данные: http://api.jquery.com/on/

например:

function greet( event ) {
  alert( "Hello " + event.data.name );
}
$( "button" ).on( "click", {name: "Karl"}, greet );
$( "button" ).on( "click", {name: "Addy"}, greet );

просто:

$(element).on("click", ["Jesikka"],  myHandler);

function myHandler(event){
   alert(event.data);     //passed in "event.data"
}

уже есть отличные ответы, но в любом случае, вот мои два цента. Вы также можете использовать:

$("#myid").click({arg1: "foo", arg2: "bar"}, myfunction)

и слушатель будет выглядеть так:

function myfunction(event){ alert(event.data.arg1); alert(event.data.arg2); }