开发者

Javascript for loop for text substitution

I try to use for loop as the substitution of list all

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

relaced by

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

}  

but it seems it doesn't work for me. How to correct it?

Below is fully working code without "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'))开发者_StackOverflow中文版;
    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>


Change the ids on your span tags to "editBox0", "editBox1" and "editBox2". Also, you posted this exact same question not 20-30 minutes ago and someone gave you the correct answer then too.


You need to add # prefix for ID selectors. Change your code to:

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

}


Among other issues like what happens when you call dEdit(...) on an empty jQuery object...

You need a # prefix to select an ID:

$('#editBox2')


Your loop goes from 0 to 1000 and editBoxN is not a valid ID selector, so you end with

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

change first editBox ID, the loop variable and add a hash to the jquery selector to match the IDs

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


The problem is the init is throwing an expection on the first value, since 'editBox0' does not exist. To fix this you can wrap each loop iteration in a try/catch.

e.g.

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

This way, if an id is undefined, the script still runs. Also, you should change <span id="editBox"> for <span id="editBox0"> or <span id="editBox1"> if you intend to have it assigned on the loop.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜