您的选择
要么将事件处理移到循环外
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 以开头,您可以通过使用以 selector 开头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/
希望这可以帮助!