当然要有别的控件先获得焦点才能失去焦点啊,或的是主动的,失去是被动的。
如果你只是想两个函数的执行顺序变一下,可以用setTimeout.

解决方案 »

  1.   

    try:
    <input type="text" onblur="alert(2)" id="t1">
    <input type="text" onmousedown="alert(1)" id="t2">
      

  2.   

    我比较同意xinyunyishui(心云意水)的观点。
    阿信的代码我试过了,最后的结果是2——1——2,不符合楼主要求。
    所以,我觉得setTimeout()比较合适,虽然可能要麻烦一些。
      

  3.   

    阿信的方法如果用tab键转换焦点的话不能通过
    用setTimeout,因为我完整的代码里面失去焦点的时候还要向服务器端提交一个xmlhttp的请求获取数据,已经要用setTimeout来监听readyState,可能用setTimeout也不能实现这个顺序.....
      

  4.   

    啊,我试的怎么不是呢?
    try again
    <input type="text" onblur="alert(2)" id="t1">
    <input type="text" onfocus=alert(1) onmousedown="onfocus='';onfocus=new Function('setTimeout(\'alert(1)\',100)')"id="t2">
    <script defer>
    t1.focus()
    </script>
      

  5.   

    fason的方法用tab键没问题了,但用mouse click的话就进入了死循环了。
    不过看了大家的意见,我也有大概的思路了,ths。不过不知道有没有办法不用settimeout来改变事件运行的顺序。明天结贴
      

  6.   

    怎么你说的我都不会呢?
    按tab键本来就没问题的
    也不明白你为什么不用setTimeout,又不是只能用一个
      

  7.   

    其实触发的顺序并不想我们想的那么理所当然:<input type="text" onblur="alert(3);" id="t1">
    <input type="text" onfocus="alert(1);alert(2);" id="t2">注意:
    alert(1)响了2声,一声是自己的,一声是alert(3)的
    alert(2)响了1声,是自己的
    alert(3)没有响,alert(1)帮他响过了。看起来是alert(1)之后alert(3)马上被触发了,虽然它的alert对话框在alert(2)之后才显示。我们来证实一下:<input type="text" onblur="alert(emu=3);alert(emu)" id="t1">
    <input type="text" onfocus="alert(emu=1);alert(emu=2);" id="t2">怎么样?emu的最后值是2而不是3,说明其实alert(emu=2)才是最后运行的。