2011-01-28 112 views
-1

我尝试JavaScript的for循环有关的问题

function init(){ 
      for(var i = 0; i < 1000; i++){ 
           new dEdit($('editBox'+i)); 
      } 

} 

使用for循环列表中的所有

function init(){ 
    new dEdit($('editBox')); 
    new dEdit($('editBox2')); 
    new dEdit($('editBox3')); 
    } 

relaced的substition但似乎它并没有为我工作。如何纠正?

感谢

下面是你的跨度标签完全工作的代码,而 “for循环”

<?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> 

回答

2

更改的ID为 “editBox0”, “editBox1” 和 “editBox2”。另外,你在20-30分钟前发布了完全相同的问题,然后有人给你正确的答案。

1

您需要为ID选择器添加#前缀。你的代码更改为:

function init(){ 
      for(var i = 0; i < 1000; i++){ 
           new dEdit($('#editBox'+i)); 
      } 

} 
1

其中就像当你调用一个空的jQuery对象上dEdit(...)会发生什么其他的问题...

你需要一个#前缀选择一个ID:

$('#editBox2')

1

循环从0变为1000,editBoxN不是有效的ID选择器,所以你以

结束
new dEdit($('editBox0')); 
new dEdit($('editBox1')); 
new dEdit($('editBox2')); 
... 

改变第一编辑框ID,循环变量和散列添加到jQuery选择以匹配的ID

function init(){ 
     for(var i = 1; i < 1000; i++){ 
      new dEdit($('#editBox'+i)); 
     } 
} 
1

问题是init在第一值抛出厚望,由于“editBox0”不存在。为了解决这个问题,你可以将每个循环迭代包装在try/catch中。

例如

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">