2

最初のクリック後にアンカーのバインドを解除したいのですが、ユーザーが特定のボタンをクリックしたときに、クリック イベントをこのアンカーに再バインドしたい

私はこのコードを書きました

 $(document).ready(function(){
    $("a.package").click(function(){
        //alert('click');            
        $(this).unbind('click'); 
        // the rest of the code
    });

    $('#activate').click(function(){
        $('a.package').bind('click');
        // the rest of the code
    });
});

アンバインド機能はうまく動作するのに、バインド機能が動作しないのはなぜですか? そしてそれを機能させる方法は?

4

3 に答える 3

4

簡単に再割り当てできるように、クリック関数を変数に保存します...

$(document).ready(function() {
  var onclick = function(e) {
    //alert('click');            
    $(this).unbind('click'); 
    // the rest of the code
  }

  $("a.package").click(onclick);

  $('#activate').click(function() {
    $('a.package').click(onclick);
    // the rest of the code
  });    
});
于 2011-07-07T20:05:52.540 に答える
0

バインドするにはコールバックを渡す必要があります。バインドが解除されると、何も記憶されません。#activate.click でバインドを再度指定した場合、そこで関数を指定する必要があります。おそらくこれを行う最善の方法は、他の場所で関数を指定し、それをバインド呼び出しに使用することです。以下の例では、jquerys .data を使用して「clickFunc」の下に関数を保存し、これを .click のコールバックとして使用しています。var を使用することもできます。

$(document).ready(function(){
    $("#package").data('clickFunc', function () {
        alert("Click");
        $(this).unbind('click');
    })
    console.log($('#package').oclick);
    $("#package").click($('#package').data('clickFunc'));

    $('#activate').click(function(){
        $("#package").click($('#package').data('clickFunc'));
        // the rest of the code
    });
});

http://jsfiddle.net/nj65w/13/

于 2011-07-07T20:02:00.863 に答える
0

最初のバインディングを.one()に変更してみてください。

$("a.package").one("click", function(){
            // alert('click');            
            // $(this).unbind('click'); <-- no need, using .one
            // call your "when clicked" function
        });
$('#activate').click(function(){
        $('a.package').click(<your "when clicked" function>);
    });
于 2011-07-07T20:02:31.310 に答える