0

おそらく、グローバル変数を使用した経験がなく、問題が発生する可能性があります。

これをチェックしてくださいhttp://jsfiddle.net/ZgXKx/クリックしたらクリックしてください!グローバル変数を使用して、いくつかの要素の ID を動的に設定しています。

このコードに問題があります:

$("#service-sets").on('click', "#facebook-del-"+a, function() {           
    var aa = $("#facebook-del-"+a).parent().parent().parent().attr("id");
    $('#'+aa).remove();

"#facebook-del-"+ainが機能していないためクリックイベントに入っていませんが、.on('click')クリックイベント内のものは機能しています(値を表示しています"#facebook-del-1")。

このようにコードを変更すると、問題ありません

$("#service-sets").on('click', "#facebook-del-1", function() {           
    var aa = $("#facebook-del-"+a).parent().parent().parent().attr("id");
    $('#'+aa).remove();

ここで確認できますhttp://jsfiddle.net/ZgXKx/1/

それで、私がした間違いは何ですか?

ありがとう!

4

3 に答える 3

2
$("#service-sets").on('click', "[id^=facebook-del]", function() {          
    $(this).closest('div.tag').remove();
});

デモ

ここ、

[id^=facebook-del]idは で始まるエレメント (クロス)facebook-elです。したがって、このようなデリゲート イベントを設定すると、グローバル変数でインデックスを作成する必要がなくなりますa

$(this).closest('div.tag')div.tagクリックした十字の入れ物である をターゲットにします。

于 2012-06-02T17:28:45.653 に答える
1

この問題は、見た目とは反対に、「a」変数がグローバルではないという事実に起因しています。これは、jsfiddle 自体によって作成された関数内にあります。

左側のコントロールを設定して、コードを<head>「onload」ハンドラーではなく に配置すると、機能します。

また、追加されたマークアップを削除するためにそのコードで行っていることを行う理由はありません。つまり、要素を見つけ、その「id」値を取得し、「id」を介して再検索するプロセスは無意味です。これらの ".parent()" 呼び出しを含む要素を見つけたら (それ自体が非常に壊れやすい方法です。外側のラッパーにクラスを与えてから を使用する方がはるかに良いでしょう.closest(".whatever"))、次のことができます。それを再び見つける理由はありません。

編集—今思うと、「a」について私が言ったことは真実ですが、それは実際にはグローバルではありません—この場合は問題にならないはずです。ただし、これは jsfiddle を苛立たせる原因となることがよくあります (もちろん、彼らの心を祝福してください)。

于 2012-06-02T17:27:39.863 に答える
0

aをクリックするためのコールバック内までインクリメントしません#facebook-button。これが実行されると:

$("#service-sets").on('click', "#facebook-del-"+a, function() {           
    ..
});

aはまだ 0 であり、#facebook-del-0決して存在しないクリック イベントのみを処理します。

代わりに削除用のクラスを使用できます。閉じるボタンにクラス「facebook-del」を与えてから、これを使用して閉じます。

$("#service-sets").on('click', '.facebook-del', function() {           
    $(this).parent().parent().parent().remove();
});

JSFiddle

于 2012-06-02T17:34:09.883 に答える