如题,文本框本身已经有设置了onfocus事件了,<input type="text" onfocus="setValue(this)"/>现在又想所有文本框 获得焦点的时候让它的背景色变色
所以动态增加了一段JS
 var item=document.getElementsByTagName("input")
     for(var i=0; i<item.length; i++){
       if(item[i].type=="text"){
         item[i].onfocus=SetColor;
       }
    }
   function SetColor(event)
    {
       var event=event || window.event;
       var obj = event.srcElement || event.target;
       obj.style.backgroundColor='#00FF00'
    }
但是这样一设置后导致了原本的一个onfocus事件被后来动态增加的onfocus事件覆盖掉了
只执行了SetColor函数,如何处理能够让让个方法都被执行,动态onfocus是每个文本框都必须的,但是setValue只是部分文本框有所以不能写在同一个方法内如何可以让后设置的事件不覆盖点前面的事件

解决方案 »

  1.   


    var item=document.getElementsByTagName("input") 
        for(var i=0; i <item.length; i++){ 
          if(item[i].type=="text"){ 
            if(document.all) item[i].attachEvent("onfocus",SetColor);
            else item[i].addEventListener("focus", function(evt){SetColor(evt);},false)
          } 
        } 
      function SetColor(event) 
        { 
          var event=event || window.event; 
          var obj = event.srcElement || event.target; 
          obj.style.backgroundColor='#00FF00' 
        } 
      

  2.   

    javascript中提供了动态参数传递的功能:
    function setValue() {
    /**
     * 在方法里加入下面的代码
     */
    var args = arguments;
    if (args[1]!=null&&args[1] == "setColor") {//判断是否提供第二个指示变色的参数
    var item = document.getElementsByTagName("input")
    for (var i = 0; i < item.length; i++) {
    if (item[i].type == "text") {
    item[i].onfocus = SetColor;
    }
    }
    }
    //.......下面是你原来的方法
    }function SetColor(event) {
    var event = event || window.event;
    var obj = event.srcElement || event.target;
    obj.style.backgroundColor = '#00FF00'
    }需要调用变色的input标签
    <input type="text" onfocus="setValue(this,'setColor')"/>
      

  3.   


    attachEvent()是IE独有的方法