2
$('#clickableElement').bind({
    mousedown: function(e)
    {
        console.log('mousedown on element');

        $(document).bind('mouseup',function(e){
            console.log('mouseup caught');

            //Do some magic here 

            $(this).unbind('mouseup');
        });

    },
    mouseup:function(e)
    {
        //mouseup within element, no use here.
    }
});

要素の内外で解放されたマウスダウンからマウスアップイベントをキャッチしようとしています。このコードはほとんど機能しますが、問題は、mouseup イベント (jqueryui) に関連付けられた他のスクリプトのバインドを解除する unbind('mouseup') です。unbind() が設定されていない場合、コードは mouseup イベント内にスタックされ、x 回呼び出されます。x はマウスダウンした回数です。

ルート 1: 自分自身を一度呼び出して破棄する、ある種の自己破壊関数はありますか?

ルート 2: コードを挿入する前に mouseup 関数をコピー/クローンし、バインドを解除してから以前のように設定する方法はありますか?

理想的には、クリック可能な要素がたくさんあるので、このコード構造をきれいに保ちたいので、document.mouseup を element.mousedown の外にバインドすると面倒です。

追加するのを忘れたフィドルは次のとおりですhttp://jsfiddle.net/9gFNk/

4

3 に答える 3

0

「on」イベントでは可能ですが、正確な解決策ではない場合があります。このコードを参照してください

    $(document).on('mousedown', function() {
        $('#clickableElement').css('display', 'none');
        $(document).bind('mouseup', function() {
             $('#clickableElement').css('display', 'block');
        });
    });

http://jsfiddle.net/9gFNk/13/

于 2013-11-09T06:43:19.090 に答える