2011-01-05 6 views
3

ユーザーがある条件で要素をクリックし、後で別の条件で再バインドする機能を無効にしたいだけです。ここで私が作業しているコードの一部です:jqueryバインドを解除してバインドする

$('#navigation a').bind('click',function(e){ 

    var $this = $(this); 
    var prev = current; 

    current = $this.parent().index() + 1; 

    if (current == 1){ 
     $("#navigation a:eq(1)").unbind("click"); // remove the click for element 
    } 
    if (current >= 2){ 
     $("#navigation a:eq(1)").bind("click"); // this doesn't work, but i want re-bind the click here. 
    } } 

私はこの作業をするために何をする必要がありますか?

+0

されているどのようなエラーあなたは? –

+0

バインディング/バインドの代わりに関数でfalseを返すのはどうですか?また、名前付き関数を使用すると作業が楽になります。 –

+0

http://api.jquery.com/live/をチェックアウトすると、私はあなたがアンバインドの代わりにpreventDefault()を行うことができると思います –

答えて

4

実際には最初のナビゲーションリンクが機能しないようにしたいと思うようです。そのような場合は、単にたい:イベントハンドラからfalseを返すよう

$("#navigation a:first").click(function() { return false; }); 

がoccuringから(リンクを次の)ブラウザのデフォルトのアクションを防ぐことができます。リンクがクリック可能であることを意図されていない場合は、<span>にそれを回し、それリンクしないでください、けれども

var link = $("#navigation a:first"); 
$("<span>").text(link.text()).attr("class", link.attr("class")) 
    .insertBefore(link); 
link.remove(); 

(リンクのクラス属性が唯一の価値があると仮定してコピーする属性)。


あなたが実際にあなたがそれを再バインドのために再び参照することができるハンドラ関数に名前を与えたい、あなたが書いたカスタムハンドラをバインド解除したい行う場合:

$('#navigation a').bind('click', onClick); 

function onClick(e) { 
    var $this = $(this); 
    var prev = current; 

    current = $this.parent().index() + 1; 

    if (current == 1){ 
     $("#navigation a:eq(1)").unbind("click"); // remove the click for element 
    } else { 
     $("#navigation a:eq(1)").bind("click", onClick); // use the function again 
    } 
} 
+0

完璧!ありがとう。 – scifirocket

関連する問題