我需要一种方法来启用和禁用任何元素。禁用意味着将不透明度设置为 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);
}