javascript for循环相关问题

时间:2011-01-28 04:06:26

标签: javascript loops javascript-events

我尝试使用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>

5 个答案:

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