你的选择
上移事件处理到循环之外
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
稍后将其委托给力。
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
SELECTOR
你把这个在你的代码:
var id = "item" + i;
这意味着5种元素的整个循环,你的ID是要这个样子的:
<li id="item1">..
<li id="item2">..
<li id="item3">..
<li id="item4">..
在COM展望周一在这里的事情,我会说这是:
item
所以,既然你的IDS开始item
你可以通过使用starts with selector概括它。因此,
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/
希望这有助于!
我有一个简单的问题。你已经自己创建了这些项目。你有他们的参考。你为什么要添加'data-theme'并设置'id'?您可以创建一个对象数组来备份数据,然后让它们引用这些元素。这样,你可以很好地分离关注点,而且你不需要所有这种巫术。 –
呃这个问题很好,我的代码有点傻,因为我现在只是搞乱了。我添加了数据主题,因为我想在点击它时更改列表元素的颜色。 – user2066880
数据属性是一个可怕的特征,通过滥用没有听说过关注点分离的人来推动规范。坏习惯很难打破 - 我强烈建议你学习第一次做对。你有兴趣看到一个不使用数据属性或jQuery的替代设计作为完成同样事情的答案吗? –