0

我有一个按钮,我在其上附加了一个点击事件。单击它后,我必须取消绑定它,稍后在我的代码中,我需要再次绑定该单击事件。我再次尝试绑定它,但它不起作用。我不能使用 jquery 'live'。有没有办法在点击事件上创建自定义绑定函数然后再次调用它?

$(".submitButton").click(function(e){
    //some functionality on click
    $(".submitButton").unbind('click');
});

//somewhere ahead in my code 
$(".submitButton").bind('click');

显然这行不通。有没有办法解决这个问题?

4

4 回答 4

3

在其他地方定义你的听众:

function clickHandler() {
    //some functionality on click
    $(".submitButton").unbind('click', clickHandler);
}

$(".submitButton").bind('click', clickHandler);

//somewhere ahead in my code 
$(".submitButton").bind('click', clickHandler);
于 2013-05-14T08:40:42.553 回答
3

当您用于.bind()绑定事件处理程序时,它也希望传递一个函数,因为这就是事件触发时将执行的内容。不要使用匿名函数,而是声明一个命名函数并在绑定时传递对它的引用。

function handleClick(e){
    //some functionality on click
    $(".submitButton").unbind('click');
}

$(".submitButton").click(handleClick);

// somewhere else in your code (in reaction to some other event)
$(".submitButton").click(handleClick);
于 2013-05-14T08:40:57.053 回答
3

您的 .bind 调用似乎不正确。您尚未指定回调。

所以从写一个函数开始:

function handleButtonClick() {
    //some functionality on click
    $(this).unbind('click');
}

请注意,在处理程序内部,我取消绑定$(this)的是被单击的元素,而不是所有带有class="submitButton". 接着:

$('.submitButton').bind('click', handleButtonClick);

然后当你想重新绑定时:

$('.submitButton').bind('click', handleButtonClick);

等等。

于 2013-05-14T08:41:15.973 回答
0

您可以使用jQuery.one(). 请参考下面的代码。

$(".submitButton").one('click', clickHandler);

此方法的第一种形式与 .bind() 相同,只是处理程序在第一次调用后是未绑定的。

您可以在必要时调用它或绑定它。

于 2013-05-14T08:44:44.683 回答