2011-01-28 114 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">