jQuery unbind不能像我预期的那样工作

时间:2012-01-06 17:11:29

标签: jquery

我有这个jquery

$('input#application_submit.bigbutton[value=Agree]').click(function(e){
    e.preventDefault();
    var reason = $('.agree_reason:visible');
    var reason_text = $('.agree_reason:visible textarea');
    if(reason.length == 0){
        $('.agree').show();
    }else{
        if(reason_text.val() == ''){
            $('.agree').show();
            $('#application_agree').css('border', '1px solid #CC0000');
            $('.agree_validation_message').show();
        }else{
            $('input#application_submit.bigbutton[value=Agree]').unbind();
            $('input#application_submit.bigbutton[value=Agree]').click();
        }
    }
});

并且一切都很好,直到unbind ....我需要它做的是删除这个处理程序并执行正常的点击事件但它冻结我的浏览器,因为它在无限循环中我猜....我曾经尝试过jQuery模具基金,也没有运气......任何想法

1 个答案:

答案 0 :(得分:6)

您必须将事件类型传递给unbind

$('input#application_submit.bigbutton[value=Agree]').unbind("click");

另外,根据PeeHaa的评论,application_submit是元素id,因为dom中的元素是唯一的(或至少更好),你可以将其简化为

$('#application_submit').unbind("click");

通过像这样的简单id来选择你几乎总是更好,因为jQuery可以遵循封面下的本地document.getElementById

另一项改进是:

var reason = $('.agree_reason:visible');
var reason_text = $('textarea', reason); // it is faster to let jQuery search in context