2009-09-07 93 views
0

我们有一个使用OnBlur和OnMouseDown事件组合的Web系统。不幸的是,出于一个奇怪的原因,OnMouseDown事件处理程序在调用OnBlur事件处理程序之前被触发。在HTML事件中设置优先级

这不是我们想要的。相反,我们希望在调用onMouseDown事件处理程序之前始终调用OnBlur事件处理程序。有没有办法这样做,也许给onBlur更高的优先级?

此前,我们没有使用onMouseDown事件处理函数,而是使用了onclick事件。但是,由于JavaScript的单线程特性,这带来了一些问题。

+0

这取决于浏览器。 – voyager 2009-09-07 14:07:22

+0

绝对是。在多个浏览器上编写代码总是很困难。但是,我们可以安全地做出我们针对IE的假设。 还有一个奇怪的是,当我用onclick事件替换onmousedown时,会发生什么情况是只调用了onblur事件处理函数,这很好,但是实际的onclick处理函数在我用字段onblur事件集。 随着onmousedown我们几乎在那里,但onblur事件是在onmousedown后触发,这不是我们想要的。 – user164701 2009-09-07 14:49:03

+0

我认为mousedown然后模糊在这种情况下是非常标准的。记住onmousedown事件处理程序可能会返回false,在这种情况下焦点更改不会发生。 onclick通常应该工作;也许发布的代码不在那里工作? – bobince 2009-09-07 23:27:05

回答

0

捕获event #2,火event #1。然后让event #2通过。

..捕获和释放模式:)

+0

非常感谢。你能否提供一个简单的例子或指针来获取更多信息? – user164701 2009-09-07 14:26:28

+0

@roosteronacid,如果只发生其中一个事件会怎样?你仍然称身体方法? – PanCrit 2009-09-07 15:34:14

0

你会使用状态变量有捏造事实。这有点肮脏,但它的作用:doImportantStuff的肉只会运行一次。

var importantStuffDone = false; 
function doImportantStuff(){ 
    if(!importantStuffDone){ 
      // Do something important 
      importantStuffDone = true; 
    } 
} 

function doOnBlur(){ 
    // This function gets bound to the blur event 
    doImportantStuff(); 
    // Do other blur stuff 
} 
function doOnMouseDown(){ 
    // This function gets bound to the mousedown event 
    doImportantStuff(); 
    // Do other mousedown stuff 
} 
+0

非常感谢。我得到了你的解决方案,但我们想要的是在调用onmousedown事件之前总是调用onBlur事件。所以问题的要点是更改JavaScript事件处理优先级或优先级。 – user164701 2009-09-07 14:29:26

+0

你不能;即使可以,传统浏览器对事件系统的实现也是如此的不同以至于它最终会打破别的东西。你能做的最好的是假的,就像这样。 – 2009-09-07 14:40:53