3

これが私のコードです。動作しますが、コンソールに次のメッセージが表示されます。

キャッチされていない TypeError: オブジェクト 2 にはメソッド 'stopPropagation' がありません

これは私のコードです:

$(".addtag").click(function () {
    var current_id = $(this).parent().attr("id");
    $('div .tag').each(function (e) {
        var this_tag_id = $(this).attr("id").replace("tag", "");
        if (this_tag_id == current_id) {
            alert("You can't tag an item twice");
            e.stopPropagation();
        }
    });
$("body").css("color","red"); <--- if (this_tag_id == current_id) I want to prevent this from executing.
}

助言がありますか?

4

2 に答える 2

4

イベント ハンドラーの引数としてではなく、 のe引数として宣言したため、イベント オブジェクトではなく DOM 要素であり、. はありません。引数を関数の外に移動し、クリックを処理する関数に移動します。eachestopPropagationeeach

$(".addtag").click(function(e) {
// Here --------------------^
var current_id = $(this).parent().attr("id");
  $('div .tag').each(function(){
// Not here ------------------^
      var this_tag_id = $(this).attr("id").replace("tag","");
      if (this_tag_id == current_id) {alert("You can't tag an item twice"); e.stopPropagation();}
  });
}

以下のコメントを再確認してください。

$(".addtag").click(function (e) {
    var current_id = $(this).parent().attr("id");
    $('div .tag').each(function () {
        var this_tag_id = $(this).attr("id").replace("tag", "");
        if (this_tag_id == current_id) {
            alert("You can't tag an item twice");
            e.stopPropagation();
        }
    });
    $("body").css("color", "red"); // <-- I want to prevent this from executing if this_tag_id == current_id.
});

にフラグを設定し、次のeach後に確認します。

$(".addtag").click(function (e) {
    var current_id = $(this).parent().attr("id");
    var iscurrent = false;       // <=== Flag
    $('div .tag').each(function () {
        var this_tag_id = $(this).attr("id").replace("tag", "");
        if (this_tag_id == current_id) {
            iscurrent = true;    // <=== Set
            e.stopPropagation(); // <=== Put this above alert
            alert("You can't tag an item twice");
        }
    });
    if (!iscurrent) {            // <=== Add check
        $("body").css("color", "red");
    }
});
于 2013-07-26T10:09:22.917 に答える
0

私があなたの意味を理解していれば:

$(".addtag").click(function (e) {
    e.stopPropagation();
    var current_id = $(this).parent().attr("id");
    $('div .tag').each(function (e) {
        var this_tag_id = $(this).attr("id").replace("tag", "");
        if (this_tag_id == current_id) {
            alert("You can't tag an item twice");
            return false;// will break the each loop here
        }
    });
}
于 2013-07-26T10:17:48.843 に答える