この文脈で.live()
を使用することは正しくないため、このエラーが発生する可能性が最も高くなります。代わりに.bind()
を使用してください。
あなたはその説明を確認した場合、あなたはlive
は、新しいHTML要素が追加されるたびにlive
にセレクタに一致するbind
の延長の形であることがわかりますイベントハンドラは自動的にバインドされます。
AJAX呼び出しを行うたびに、.live()
関数を呼び出すと、HTMLマークアップが作成されるたびに新しいハンドラーがリンクに追加されます。
それは意味があると思って、説明するために私の最善を尽くしました。
EDIT:
は、コードを見てみると、peopleDataが今文脈から外れていることが表示されますので、それは存在しません。この変数はポストコールバック関数内で作成され、clickイベントハンドラは関数外に作成されます。
は、次の試してみてください。
$(function() {
var letters = $("ul#peopleLetters li");
var current = $("ul#peopleLetters li.selected");
var d = '';
retrievePeople('#');
letters.click(function() {
d = $(this).attr("title");
current.removeClass("selected");
current = $(this);
$(this).addClass("selected");
retrievePeople(d);
});
function retrievePeople(character) {
$.post('includes/getPeople.php', {char: character}, function(data) {
var peopleData = data.people;
var count = data.count;
var markup = '';
var countDetails = '';
countDetails = (character == '#') ? count + " Listings Were Found." : count + " Listing(s) Beginning With The Letter '" + character + "'";
if(count == 0){ markup = "No results were found.";}
else {
//markup stuff [although, a note here, instead of using data.people, you can, and should use peopleData]
}
$("#peopleTable a.nameLink").bind("click", {data: peopleData}, function(e) {
var index = $(this).attr("title");
console.log(data[index].Email);
alert(data[index].Email);
e.preventDefault();
});
$("#allPeople").html(markup);
}, "json");
}
});
出典
2011-01-06 11:11:11
Dan
こんにちはダンは、私は私はあなたが言うしようとしているが、実際には問題を解決していない().bind使用しているものだと思います。私はまだ "peopleDataが未定義"になっています。これは私のコードです: $( "#peopleTable a.nameLink")bind( "クリック"、{データ:peopleData}、関数(e){ \t var index = $(this).attr( "title"); \tにconsole.log(データ[インデックス] .Email); \tアラート(データ[インデックス] .Email); \t e.preventDefault();} )。 – Kassem
@カッセムあなたの投稿を編集してそこにJSコード全体を入れる可能性はありますか?おそらく何かが変数をクリアしています。上記のコメントにコピーされたコードでは、 'peopleData'を使用している間に' data'を使用していますが、 – Dan
は完全なコードhttp://pastebin.com/C0WeMEhCです。しかし、データの代わりにpeopleDataを使用するのはなぜですか? – Kassem