我尝试使用for循环作为list all
的替代function init(){
new dEdit($('editBox'));
new dEdit($('editBox2'));
new dEdit($('editBox3'));
}
由
重新命名function init(){
for(var i = 0; i < 1000; i++){
new dEdit($('editBox'+i));
}
}
但它似乎对我不起作用。如何纠正?
由于
以下是没有“for loop”
的完全正常工作的代码<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title> New Document </title>
<meta name="title" content="" />
<meta name="author" content="0xs.cn" />
<meta name="subject" content="" />
<meta name="language" content="zh-cn" />
<meta name="keywords" content="" />
<style type="text/css" >
/* default css rule */
body { font: 12px "Verdana"; }
</style>
<script type="text/javascript" >
// shortcut
function $(s){
return typeof s == 'object'?s:document.getElementById(s);
}
var dEdit = function(el){
var me = this;
this.save = function (txt){
el.innerHTML = txt;
};
this.edit = function (e){
var e = e || event;
var target = e.target || e.srcElement;
if(target.tagName.toLowerCase() == 'input'){
return;
}
var ipt = document.createElement('input');
ipt.value = target.innerHTML;
ipt.onkeydown = function(){
if((arguments[0]||event).keyCode==13){
me.save(this.value);
}
};
ipt.onblur = function(){
me.save(this.value);
};
target.innerHTML = '';
target.appendChild(ipt);
ipt.focus();
};
el.onclick = this.edit;
};
function init(){
new dEdit($('editBox'));
new dEdit($('editBox2'));
new dEdit($('editBox3'));
}
window.onload = init;
</script>
</head>
<body>
<span id="editBox">This is sample text.</span> <br/><br/>
<span id="editBox2">This is sample text 222.</span> <br/><br/>
<span id="editBox3">This is sample text 333.</span>
</body>
</html>
答案 0 :(得分:2)
将span标签上的ID更改为“editBox0”,“editBox1”和“editBox2”。另外,你在20-30分钟之前发布了这个完全相同的问题,而且有人也给了你正确答案。
答案 1 :(得分:1)
您需要为ID选择器添加#前缀。将您的代码更改为:
function init(){
for(var i = 0; i < 1000; i++){
new dEdit($('#editBox'+i));
}
}
答案 2 :(得分:1)
其他问题包括在空jQuery对象上调用dEdit(...)
时会发生什么......
您需要#
前缀来选择ID:
$('#editBox2')
答案 3 :(得分:1)
你的循环从0到1000并且editBoxN不是有效的ID选择器,所以你以
结束new dEdit($('editBox0'));
new dEdit($('editBox1'));
new dEdit($('editBox2'));
...
更改第一个editBox ID,循环变量并向jquery选择器添加一个哈希以匹配ID
function init(){
for(var i = 1; i < 1000; i++){
new dEdit($('#editBox'+i));
}
}
答案 4 :(得分:1)
问题是init正在对第一个值进行预测,因为'editBox0'不存在。要解决此问题,您可以将每个循环迭代包装在try / catch中。
e.g。
function init(){
for(var i = 0; i < 1000; i++){
try {
new dEdit($('editBox'+i));
} catch (e) {}
}
}
这样,如果未定义id,脚本仍会运行。此外,如果您打算在循环中分配<span id="editBox">
或<span id="editBox0">
,则应更改<span id="editBox1">
。