あなたのオプション
イベント処理をループの外に移動するか
for(var i=1; i <= 5; i++) {
....
}
$(document).delegate("[id^=item]", "tap", function() {
});
bind
メソッドを使用してtap
、 ではなく要素にイベントを適用しますdocument
。
for(var i=1; i <= 5; i++) {
//append li to ul
$("#"+id).bind("tap", function() {
$(this).attr({
"data-theme" : "e",
"class" : "ui-li ui-li-static ui-btn-up-e"
});
});
}
event
しかし、ループの外側に置き、ul
後でそれをliに委譲するイベントをバインドするのが最善の方法です。
for(var i=1; i <= 5; i++) {
....
}
$("ul").delegate("[id^=item]", "tap", function() {
});
ノート
テーマを変更する場合は、レイアウトも一度更新する必要があります。
$("ul").delegate("[id^=item]", "tap", function() {
$(this).attr({
"data-theme" : "e",
"class" : "ui-li ui-li-static ui-btn-up-e"
}).parent("ul").listview().listview("refresh");
});
セレクターSTARTS WITH
の使用
これをコードに入れました:
var id = "item" + i;
つまり、5 つの要素のループ全体では、ID は次のようになります。
<li id="item1">..
<li id="item2">..
<li id="item3">..
<li id="item4">..
ここで一般的なことを見ると、次のようになります。
item
したがって、idは で始まるため、 starts with セレクターitem
を使用して一般化できます。そう、
id^=item
で始まる ID を持つ要素を検索していることを意味しますitem
。属性なので、
[id^=item]
よりモジュラーなアプローチ
この方法には、より少ない HTML が含まれます。
//your ul tag
var ul = $("ul")
//set up an array for adding li to it.
var li = [];
//a temporary element to store "li"
var $li;
for(var i=1; i <= 5; i++) {
//add required attributes to the element
var $li = $("<li/>", {
"data-theme" : "d",
"id" : "item" + i,
"html" : "Item " + i
});
//push that into array
li.push($li);
}
//wait for append to finish
ul.append(li).promise().done(function () {
//wait for list to be added - thats why you wait for done() event in promise()
//add the click events to this - event delegation - this way your click event is added only once
$(this).on("tap", "[id^=item]", function () {
$(this).attr({
"data-theme" : "e",
"class" : "ui-li ui-li-static ui-btn-up-e"
}).parent("ul").listview().listview("refresh");
});
//then refresh
$(this).listview().listview("refresh");
});
このデモは次のとおりです: http://jsfiddle.net/hungerpain/TdHXL/
お役に立てれば!