jQuery使用参数绑定和取消绑定事件

时间:2009-11-17 18:53:44

标签: jquery bind unbind

我正在尝试将事件绑定到包含参数的textbox。以下内容看起来好像应该这样做,但每次加载页面时都会执行它。

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

每次加载页面时都会使用该参数调用事件。这可能不起作用,因为不支持带参数的事件。如果是这样,还有另一条路线吗?

5 个答案:

答案 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...;
    ...;
}