要素を有効または無効にするメソッドが必要です。不透明度を0.6に設定し、onClickコールバックを削除するという意味を無効にします。不透明度を1に設定し、コールバックを再度追加することを意味します。
私の最初の2回の試みは惨めに失敗しました。callback
メソッドがスタックされ、クリックするたびに1回実行する代わりに、メソッドが何度も実行されていました。
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を実行すると、アイテムをクリックすると2回発生します。
どういうわけかそれを達成できますか?
アップデート
ぎりぎりでした。オフは私にとってはうまくいきましたが、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);
}