【发布时间】:2012-07-02 16:54:13
【问题描述】:
我们正在使用 C# 中的 WatiN 与浏览器(目前只有 IE)进行交互。
WatiN 的一些方法是一个简单的包装器,可将onchanged() 和onclick() 发送到某些网络元素。
WatiN 还为此提供了一个即发即弃的版本,它基本上提供了一个非阻塞版本。
我的问题是,浏览器是否也有两个JS函数同时执行?
例如,假设以下代码:
// Uses FireEventAsync("onchanged")
SelectList.SelectNoWait()
SelectList.FireEventAsync("onclick")
JS函数onclick和onchanged可以同时执行吗?
我相信我们遇到了类似的问题,当我们触发另一个事件时,onchanged() 函数仍在执行,我想知道这在技术上是否可行。
【问题讨论】:
-
这取决于我怀疑的浏览器。
-
Javascript 执行是事件驱动的,因此当您触发
onclick和onchange时,浏览器只需将处理程序添加到执行队列中。然后,它们按顺序执行。因此,如果您的问题是“是否可以同时触发事件” - 答案肯定是肯定的。但是,我认为它们被执行的顺序并不能保证。 -
用浏览器类型 (IE) 更新了我的问题。
-
@J0HN 是否有任何关于执行模型的链接/文档,以了解这实际上是如何完成的?
-
@J0HN 基本上是正确的。我唯一想澄清的是,浏览器中的函数执行并不是实际上同时进行的,因此如果函数不是原子的,则不存在竞争条件的风险。如果您在另一个函数正在执行时触发一个事件,它应该在当前函数完成时排队等待处理。
标签: javascript c# .net dom-events watin