2009-11-17 2 views
8

Я пытаюсь связать событие с textbox, которое содержит параметры. Следующее содержимое выглядит так, как будто оно должно это делать, но каждый раз, когда страница загружается, она выполняется.jQuery связать и отменить событие с параметрами

jQuery(function(){ 
    jQuery('#textbox').bind('click', EventWithParam('param')); 
}); 

Событие вызывается с этим параметром каждый раз, когда страница загружается. Это может не работать, потому что события с параметрами не поддерживаются. Если да, есть еще один маршрут?

ответ

10

Чтобы связать функцию, которая принимает параметры, используйте анонимную функцию, чтобы действовать как замыкание по параметрам.

jQuery(function($) { 
    var param = 'text'; 
    $('#textbox').click(function() { 
     EventWithParam(param); 
     // or just use it without calling out to another function 
     $(this).text(param); 
    }); 
}); 

Ваш пример выполняет функцию EventWithParam, а затем пытается привязать к результату этого вызова функции.

Вызов unbind без указания функции отменит все обработчики для указанного типа события (включая анонимную функцию). Если вы хотите, чтобы отвязать эту функцию конкретно, вы должны будете предоставить ему имя, например:

jQuery(function($) { 
    var param = 'text', 
     clickCallback = function() { 
      EventWithParam(param); 
      // or just use it without calling out to another function 
      $(this).text(param); 
     }; 
    $('#textbox').click(clickCallback); 
}); 
1

Причина заключается в том, что EventWithParam вызывается как функция тут же, в связывании. С другой стороны, вы привязываете событие click к результату вызова EventWithParam('param'). Это должно работать:

jQuery('#textbox').bind('click',function(){EventWithParam('param')}); 

Теперь вы объять даже на функцию, которая, когда срабатывает событие, будет вызывать EventWithParam('param')

+0

если я тогда делать отвязать, будет ли отвязать анонимную функцию? jQuery ('# textbox'). Unbind ('click') ;? –

+0

Да. См. [Http://docs.jquery.com/Events/unbind#typefn] – Dan

+0

Это не работает для меня? –

0
jQuery(function() { 
    jQuery('#textbox').click(function() { 
     EventWithParam(param1,param2,...,paramN); 
    }); 
}); 

function EventWithParam(param1,param2,...,paramN) { 
    doSomething...; 
    ...; 
} 
4

bdukes это точно. Я добавляю свой ответ, поскольку недавно нашел что-то интересное, связанное с функцией jQuery bind/unbind и анонимными функциями, пространствами имен событий. Ранее показанное выше событие привязки вызывается следующим образом.

jQuery('#textbox').bind('click',function(){EventWithParam('param')});

Чтобы отвязать это даже пользователь должен позвонить ... jQuery('#textbox').unbind('click');

В действительности, удаляя все события OnClick.

Теперь в пространствах имен jQuery. Если у вас есть анонимная функция, которую вы хотите присоединить к событию click, а затем отмените ее, выполните следующие действия.

jQuery('#textbox').bind('click.yourNameSpace',function(){EventWithParam('param')});

Тогда отвязать простой вызов в UNBIND функцию следующим образом.

jQuery('#textbox').unbind('click.yourNameSpace');

Остальные ваши OnClick события останутся.

11

Вы можете передать параметры события в качестве вторых аргументов для bind().Это не является прямым обратным вызовом, но, возможно, использовать параметры вы хотели бы использовать:

С Jquery документации: bind

function handler(event) { 
    alert(event.data.foo); 
} 
$("p").bind("click", {foo: "bar"}, handler) 
+0

Определенно что-то я использовал бы –

+0

В функции handler() объект можно получить через поле данных «данные»: обработчик функции (evt) {var fooValue = evt.data.foo; } – SCO

Смежные вопросы