Clickが一度しか反応しないJavascript

window.confirm→trueとなった後、2回目以降が発動しません。何がダメなのでしょうか?

$(function(){
$("#main_box").append(function(){
var nativeJSON = localStorage.getItem('strage');

//JavaScriptオブジェクトに変換
var object = JSON.parse(nativeJSON);

var html = "データ一覧:<BR>";

for(var idx=0; idx < object.items.length; idx++) {
html = html + object.items[idx].name + "<span class='disp'>削除</span><BR>";
}

$("#strage").append(html);

});

var disp = function disp(){

if(window.confirm('削除OK?')){

var nativeJSON = localStorage.getItem('strage');

var object = JSON.parse(nativeJSON);

var object = localStorage.getItem('strage') ? JSON.parse(localStorage.getItem('strage')) : { items: []};
object.modified = "2012/05/23 Wed";

var index = $(".disp").index(this);

object.items.splice(index,1);

console.log(object);

nativeJSON = JSON.stringify(object);

// ローカルストレージ保存
localStorage.setItem('strage', nativeJSON);

var html = "最終更新:" + object.modified + "<BR>";

for(var idx=0; idx < object.items.length; idx++) {
html = html + object.items[idx].name + "<span class='disp'>削除</span><BR>";
}

$("#strage").empty();

$("#strage").append(html);
}

}

//問題はここ。
$(".disp").click(disp);

}
});

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2012/05/25 16:06:10
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:Cherenkov No.1

回答回数1504ベストアンサー獲得回数493

ポイント100pt

まずnativeJSONとobjectの部分を整理してから。エラーメッセージはありませんか?
HTML部分を推理するのは手間なのでコピペするだけで動作確認ができるモデルを書いてから質問したほうが早く解決すると思います。
https://gist.github.com/
http://jsfiddle.net/
を活用するのがおすすめです。

多分新たに追加される .disp にclickイベントがbindされてないからでは。

$(".disp").click(disp);
↓
$(".disp").live('click', disp);

にしてみるとか。

他1件のコメントを見る
id:a-kuma3

ちぇ、出遅れた。
http://stacktrace.jp/jquery/api/events/live.html

jQuery のバージョンにもよりますけど、.delegate() とか .on() というのもあります。

2012/05/25 15:27:07
id:goodbabies

live() ですか、ありがとうございます。参考になりました。
使っているjQueryは最新使うようにしているのでたぶん大丈夫です。

まだまだbindなど、理解できていません。よく勉強したいと思います。

2012/05/25 16:05:17

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません