原代码中某个控件的onblur事件已有处理函数,现在需要在该处理函数前插入另外一个函数做其他事情,不能直接在原代码控件的onblur事件中直接添加,想利用attachEvent/addEventListener来实现,但是发现这样为控件注册的函数不能再原函数之前执行,不知道有没有办法解决,请高手指教。<html>
<head></head>
<script type="text/javascript">
function check() {
alert("check");
}

function format() {
alert("format");
}

</script>
<body>
<form name="testFrm">
Name: <input type="text" name="name" value="" onblur="format();"/><br>
Age : <input type="text" name="age" value="" onblur=""/><br>
<input type="button" name="btnOk" value="OK" onclick="" />
</form>
</body>
<script type="text/javascript">
var items = document.getElementsByName("name");
var itemName = items[0];
alert(itemName);
itemName.attachEvent("onblur", check);
</script>
</html>

解决方案 »

  1.   

    楼主不可能做到两个相同的事件干不同的事情<html>
        <head></head>
        <script type="text/javascript">
            function check() {
                format();//把函数移到这里边就行了 在check之前先做format 可以让format返回一个布尔值 true往下执行 否则 return;
                alert("check");    
            }
            
            function format() {
                alert("format");    
            }
            
        </script>
        <body>
            <form name="testFrm">
            Name: <input type="text" name="name" value=""/><br>
            Age : <input type="text" name="age" value="" onblur=""/><br>
            <input type="button" name="btnOk" value="OK" onclick="" />
            </form>
        </body>
        <script type="text/javascript">
            var items = document.getElementsByName("name");
            var itemName = items[0];
            alert(itemName);
            itemName.attachEvent("onblur", check);
        </script>
    </html>
      

  2.   

    就是想再format执行前先对输入数据做下check
      

  3.   

    <html>
        <head></head>
        <script type="text/javascript">
            function check() {
                alert("check");
                if(你的判断条件){
                    return true;
                }else{
                    return false;
                }
            }
            
            function format() {
                if(check()){
                   alert("format"); 
                 }else{
                    alert('check结果有误')
                }
                 
                  
            }
            
        </script>
        <body>
            <form name="testFrm">
            Name: <input type="text" name="name" value="" onblur = "format()"/><br>
            Age : <input type="text" name="age" value="" onblur=""/><br>
            <input type="button" name="btnOk" value="OK" onclick="" />
            </form>
        </body>
       
    </html>
      

  4.   

    问题是我现在程序的执行结果是先执行format再做check了,而且原代码不允许修改。
    实际上原站点中所有类似的text控件都需要添加onblur时的数据check,所以需要通过共通处理来动态添加
      

  5.   

    原来的onblur事件不一定只是执行format,也有可能是其他函数
      

  6.   

    代码不允许修改是指哪段代码不允许修改 所有的?还是js的?还是html的?
      

  7.   

    找了很久的资料,确实是个棘手的问题。无法改变事件处理函数的顺序,我用的是比较笨得方法,先移除了onclick属性,再绑定check最后在重新绑定format。我试过此方法可行
      

  8.   

    原有js不允许修改,只允许在原有html中添加某段处理来实现
    请问楼上提到方法如何实现,可否动态获取空间的某个属性所调用的函数,再重新绑定,能不能贴上代码参考一下,谢谢
      

  9.   

    原有js不允许修改,这需求够让人郁闷的。试了下,用detachEvent取消不了check。
    如7#所说,用 itemName.onblur = ""; 可以。然后在顺序绑定check和format。