添加单击返回到未绑定的事件

时间:2011-06-22 17:21:58

标签: jquery click bind unbind

当我运行以下代码时,我只希望#overlay,#image + theNumber和#close处于活动状态,因此我禁用$('。box')。单击但是一旦#close被点击我想要重新启用$('。box')的点击,但我无法到目前为止。我检查了其他答案,但无法将它们放在一起。谢谢你的帮助!!



var handler = function() {

var theIDval = $(this).attr('id');
var theNumber = theIDval.replace('box','');

    $('.box').unbind('click');

    $('#overlay').show();
    $('#image' + theNumber).fadeIn();
    $('#close').fadeIn();

    $('#close').click( function () {
        $('#overlay').fadeOut();
        $('#image' + theNumber).fadeOut();
        $('#close').fadeOut();

        });
    };

$(document).ready( function() {
    $('.box').click(handler);
});

2 个答案:

答案 0 :(得分:2)

看起来你所缺少的是重新绑定.box点击处理函数中的#close点击事件

$('#close').click(function() {
    $('#overlay').fadeOut();
    $('#image' + theNumber).fadeOut();
    $('#close').fadeOut();
    $('.box').click(handler);
});

http://jsfiddle.net/pxfunc/gUP68/

答案 1 :(得分:1)

如果我是你,我会这样做:

var handler = function() {
    var $box = $('.box');
    if($box.hasClass('disabled')){
       // do nothing, just disallow further spawns
   } else{
        $box.addClass('disabled');
        var theIDval = $(this).attr('id');
        var theNumber = theIDval.replace('box','');

        // no need to unbind, remove this
        // $('.box').unbind('click');

        $('#overlay').show();
        $('#image' + theNumber).fadeIn();
        $('#close').fadeIn();

        $('#close').click( function () {
            $('#overlay').fadeOut();
            $('#image' + theNumber).fadeOut();
            $('#close').fadeOut();
            $box.removeClass('disabled'); // re-enable click
        });
   }
};

$(document).ready( function() {
    $('.box').click(handler);
});