删除jquery中的unbind属性

时间:2012-03-29 09:57:16

标签: javascript jquery

我使用unbind方法禁用了图像的click事件。但我不知道如何再次恢复点击事件。 这是代码,

<img src="testimg.jpg" id="sub_form">

使用代码

禁用上面图片的点击事件
$('#sub_form').unbind('click');

如何恢复点击事件?我尝试了绑定事件

  $('#sub_form').bind('click');

但它无法正常工作。

为什么我要点击图片的点击事件是ajax表单提交。代码是,

$("#sub_form").click(function() {
var input_data = $('#testform').serialize();
    $.ajax({ 
//my code
});
});

如何在执行图像解除绑定后实现此目的。

3 个答案:

答案 0 :(得分:4)

如果保存了处理程序,则可以再次调用它:

var handler = function() {
    alert('click');
};

$('#sub_form').click(handler);

// disabling:
$('#sub_form').unbind('click', handler);

// reenabling:
$('#sub_form').click(handler);

如果您不知道绑定的处理程序,您可以在解除绑定之前找到并保存它们:

// save the click handlers
var events = $('#sub_form').data('events'),
    handlers = 'click' in events ? Array.prototype.slice.call(events.click) : [],
    handler = function() {
        $.each(handlers, function() {
            this.handler();
        });
    };

// disable
$('#sub_form').unbind('click');

// reenable
$('#sub_form').bind('click', handler);​

http://jsfiddle.net/sPPnE/

答案 1 :(得分:0)

您需要为事件处理程序提供在事件发生时运行的函数,请尝试:

$('#sub_form').bind('click', function() {
    alert("You clicked #sub_form");
});

如果您要定期绑定/取消绑定,最好将逻辑放入其自身的功能中,以便它可以轻松反弹:

$("#element").click(function() {
    $("#sub_form").unbind();

    // do something

    $("#sub_form").bind('click', myFunc);
});

function myFunc() {
    alert("You clicked #sub_form");
}

答案 2 :(得分:0)

您可以在致电function reference时指定.unbind()

例如:

function myHandler( event ) {
}

// bind the click handler
$('#sub_form').bind('click', myHandler);

// remove only this exact click handler
$('#sub_form').unbind('click', myHandler);

// bind it again
$('#sub_form').bind('click', myHandler);

Sidenote :对于jQuery 1.7.x,您应该使用.on().off()等效方法。

参考:.on().off().bind().unbind()