1

クリックイベントのバインドを解除して再バインドしようとしてスタックしています。クリックイベントを「保存」し、バインドを解除して、条件付きステートメントで再バインドしたいと思います。

ここの情報を使用して、クリックハンドラーを保存することができます: jQueryは、オブジェクトに登録されているイベントハンドラーを検索します

古いバージョンのjQuery(1.5)を使用しているため、data( "events")メソッドを使用しています。

ここのところ...

var events = $('#myElement').data("events");

alert(events.click[0].handler);

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

これで、ハンドラー関数が警告され、正しく表示されます。何かを追加したいのですが、最初は同じクリックイベントを再バインドしてみようと思いました。ただし、正しく再バインドする方法がわかりません。私が試したこと:

$('#myElement').bind('click', null, events.click[0].handler); // gives 'click.0 is null or not an object

$('#myElement').bind('click', events.click[0].handler); // gives 'click.0 is null or not an object

$('#myElement').bind('click', null, events.click); // seems to have no effect

$('#myElement').bind('click', events.click); // seems to have no effect

ですから、ほぼ手元にあると思いますが、ここからどうしたらいいのかわかりません。イベント変数を使用してクリックイベントを再バインドするにはどうすればよいですか?

助けてくれてありがとう。

4

1 に答える 1

1

.die()jQuery(1.4.1で追加)のメソッドを利用できます。.live()でアタッチされたハンドラーは、.die()で削除できます。

.die()の参照:http ://api.jquery.com/die/ .live()の参照: http
://api.jquery.com/live/

HTML

<div id="myElement">Testing save event</div>

JavaScript

<script type="text/javascript">
    $(document).ready(function() {


     function ClickEventHandler()
     {
        alert('abc');
     }

     $('#myElement').live('click', ClickEventHandler);


     function GetClickEventHandler(selector)
     {
        for(var i = 0 ; i < $._data(document).events.live.length ; i++)
        {
            if( $._data(document).events.live[i].selector == selector )
            {
                return $._data(document).events.live[i].handler;
            }
        }   
        return null;
     }

     var myFn = GetClickEventHandler('#myElement');

     $('#myElement').die();


     $('#myElement').live('click', myFn );
    });
</script>

コードが実際に機能するかどうかを確認するには、コメントアウトし$('#myElement').live('click', myFn );て要素をクリックしてみてください。アラートは表示されません。次に、これを有効に戻すと、アラートが表示されます。

追加されたjsfiddleの例:
1つはコメントアウトされています: http: //jsfiddle.net/9wbPH/1/
1つは実際の作業です: http: //jsfiddle.net/9wbPH

于 2013-02-26T16:30:37.943 に答える