2009-11-17 106 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被称为在你的绑定功能就在那里。换句话说,您将点击事件绑定到调用EventWithParam('param')结果。这应该工作:

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

现在你已经绑定的甚至,当事件触发,将调用EventWithParam('param')

+0

如果我再做解除绑定,将它取消绑定匿名函数? jQuery('#textbox')。unbind('click');? – 2009-11-17 19:21:24

+0

是的。请参阅[http://docs.jquery.com/Events/unbind#typefn] – Dan 2009-11-18 18:30:58

+0

这对我不起作用? – 2015-06-16 12:10:45

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

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

bdukes是完全正确的函数。我添加了我的回复,因为我最近发现了一些与jQuery的绑定/解除绑定函数和匿名函数及其事件名称空间有关的有趣事情。以前在绑定事件上方显示的内容如下所示。

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

解除绑定这甚至用户必须拨打...... jQuery('#textbox').unbind('click');

实际上,删除所有的onclick事件。

现在进入jQuery名称空间。如果你有一个匿名函数,你希望附加到点击事件,然后解除绑定,如下所示。

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

然后解除绑定简单的通话将解除绑定功能如下。

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

您的onclick事件的其余部分将保持不变。

11

您可以将事件参数作为第二个参数传递给bind()。它不是直接回调指标的影响,但也许你想使用它:

从jQuery的文档: bind

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

definatly我会使用的东西 – 2011-05-17 17:27:03

+0

在handler()函数中,可以通过事件“data”字段访问该对象:function handler(evt){var fooValue = evt.data.foo; } – SCO 2012-04-17 08:33:48