我正在尝试将事件绑定到包含参数的textbox
。以下内容看起来好像应该这样做,但每次加载页面时都会执行它。
jQuery(function(){
jQuery('#textbox').bind('click', EventWithParam('param'));
});
每次加载页面时都会使用该参数调用事件。这可能不起作用,因为不支持带参数的事件。如果是这样,还有另一条路线吗?
答案 0 :(得分:11)
您可以将事件参数作为第二个参数传递给bind()。它不是直接的回调参数,但也许您想使用它:
来自jQuery文档: bind
function handler(event) {
alert(event.data.foo);
}
$("p").bind("click", {foo: "bar"}, handler)
答案 1 :(得分: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);
});
答案 2 :(得分:4)
bdukes是完全正确的。我正在添加我的回复,因为我最近发现了一些与jQuery的bind / unbind函数和匿名函数,它的事件名称空间有关的有趣内容。之前在上面显示的bind事件调用如下。
jQuery('#textbox').bind('click',function(){EventWithParam('param')});
要取消绑定,即使用户必须致电...
jQuery('#textbox').unbind('click');
实际上,删除所有onClick事件。
现在有jQuery名称空间。如果您有一个匿名函数,您希望附加到click事件,稍后解除绑定,请执行以下操作。
jQuery('#textbox').bind('click.yourNameSpace',function(){EventWithParam('param')});
然后解除unbind简单调用unbind函数,如下所示。
jQuery('#textbox').unbind('click.yourNameSpace');
其余的onClick事件将保留。
答案 3 :(得分:1)
原因是EventWithParam在绑定中被称为函数。换句话说,您将click事件绑定到调用EventWithParam('param')
的结果。这应该有效:
jQuery('#textbox').bind('click',function(){EventWithParam('param')});
现在你已将偶数绑定到一个函数,当事件触发时,将调用EventWithParam('param')
答案 4 :(得分:0)
jQuery(function() {
jQuery('#textbox').click(function() {
EventWithParam(param1,param2,...,paramN);
});
});
function EventWithParam(param1,param2,...,paramN) {
doSomething...;
...;
}