1

我需要一种方法来启用和禁用任何元素。禁用意味着将不透明度设置为 0.6 并删除 onClick 回调。启用含义将不透明度设置为 1 并再次添加回调。

我的前两次尝试惨遭失败,这些callback 方法只是堆叠起来,而不是在每次单击后运行一次,而是运行越来越多次。

function disableElement(element){
    var el = $('#'+element); 
    el.css('opacity','0.6');
    el.on('click',null);     //this doesn't work
            el.removeAttr('onClick'); // this doesn't help either.

}

function enableElement(element,callback){
    var el = $('#'+element); 
    el.css('opacity','1');
    el.on('click',callback);            
}

然后我尝试使用 el.data:

disableElement:function(element){
        var el = $('#'+element); 
        el.css('opacity','0.6');
        el.data('element-enabled','false');
        //el.click(function (){
        //  alert('disabled');
        //});           
    },
    
    enableElement:function(element,callback){
        console.log('enabling');
        var el = $('#'+element);
        console.log(el);
        if(el.data('element-enabled') == "true")
            return;
        console.log("setOpacity");   
        el.css('opacity','1');
        el.data('element-enabled','true');
        el.click(function(){
            if(el.data('element-enabled') == "true")
                callback();
        }); 
            
    }

现在它们不会堆叠,只要我不禁用它。如果我禁用然后再次启用它,它会被堆叠。这意味着,如果我多次运行 enableElement 回调不会堆叠。但是一旦我运行 disableElement 然后 enableElement,如果我点击该项目,它会发生两次。

能以某种方式实现吗?

更新

那很接近。关闭对我有用,但我还必须在 enableElement 上将其删除。有时我必须调用它两次,所以它仍然在堆叠。终于成功了,谢谢!

disableElement:function(element){
    var el = $('#'+element); 
    el.css('opacity','0.6');        
    el.off('click');

},

enableElement:function(element,callback){       
    var el = $('#'+element);
    el.off('click');                    
    el.css('opacity','1');      
    el.on('click',callback);    
        
}
4

3 回答 3

4

要删除事件,只需使用.off()

el.off('click');

要重新添加事件,您可以这样做

el.on('click',callback);  
于 2012-12-14T17:06:51.240 回答
3

您需要使用.offas in .off('click')。这将删除该click类型的所有绑定事件。 文档.off

请注意,如果您使用.off它不会返回事件或任何东西,并且您不能简单地重新绑定.on. 但是,由于您已在单独的函数中定义了回调,因此您可以重新绑定为.on('click', function_name). 这只是需要注意的事情。

于 2012-12-14T17:07:09.303 回答
1

取消绑定将删除分配给某个事件的对象的所有处理程序:

$('#foo').unbind('click');

您还可以通过将其添加为第二个参数来将其设置为某些特定函数

$('#foo').unbind('click', myfunctionname);
于 2012-12-14T17:07:54.873 回答