3

ユーザーがある条件で要素をクリックし、後で別の条件で再バインドする機能を無効にしたいだけです。ここに私が取り組んでいるコードの一部があります:

 $('#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.
    } }

これを機能させるにはどうすればよいですか?

4

1 に答える 1

4

実際には、最初のナビゲーション リンクが機能しないようにしたいだけのようです。その場合は、次のようにします。

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

イベント ハンドラーから戻るfalseと、ブラウザーの既定のアクション (リンクをたどる) が発生しなくなります。

ただし、リンクをクリック可能にすることを意図していない場合は、リンクにせず、次のようにします<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
    }
}
于 2011-01-05T05:02:08.593 に答える