1

要素を有効または無効にするメソッドが必要です。不透明度を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);    
        
}
4

3 に答える 3

4

イベントを削除するには、.off()

el.off('click');

イベントを追加し直すには、次の操作を行うだけです。

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

.offのように使用する必要があります.off('click')。これにより、そのタイプのバインドされたイベントがすべて削除されますclickのドキュメント.off

使用.offしてもイベントなどは返されません。また、単に。で再バインドすることはできません.on。ただし、別の関数でコールバックを定義しているので、として再バインドするので、これで問題ありません.on('click', function_name)。知っておくべきことです。

于 2012-12-14T17:07:09.303 に答える
1

Unbindは、あるイベントのオブジェクトに割り当てられたすべてのハンドラーを削除します。

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

2番目の引数として追加することで、これを特定の関数に設定することもできます

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