/ / jqueryバインドとバインディング - jquery、bind、unbind

jqueryバインドとバインディング - 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.
} }

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

回答:

回答№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
}
}