如何使用YUI3触发DOM事件

时间:2014-10-30 12:20:15

标签: javascript events yui3

在YUI上工作时遇到了烦人的问题。

我有一个主区域和一个导航块。可以通过直接单击或单击导航块中触发主区域中相应元素的元素来激活主区域中的元素。

事实证明,在YUI中以编程方式触发click事件并不像我想象的那么简单。查看文档,我发现了很多关于如何附加和委派事件但没有如何调用事件的信息。

我找到this question,但它涉及创建新的自定义事件而不是调用现有事件。

使用 .simulate()可以回答所有其他类似的问题,但实际上这并不是出于兼容性原因的最佳选择,YAHOO本身也不建议客户端使用{{3 }}。 编辑:重新阅读该部分后,我意识到警告与此问题的主题无关。

我通过在节点的DOM元素中调用 click()命令找到了一个解决方案,但这实际上是最后的手段,我想知道是否有更“干净”的方法可以做通过YUI。

以下是我现在正在做的一个例子:http://yuilibrary.com/yui/docs/event/simulate.html#faking

在示例中,第二个按钮是使用DOM元素

触发第一个按钮的click事件
Y.one('#clickme')._node.click();

结论

在更多地摆弄代码之后,我开始意识到 simulate()在大多数情况下都是首选,但不是全部。

我需要使用的YUI vesrion(3.14)在模拟IE9及更高版本中的点击事件时存在已知问题。由于 - 由于其他技术原因 - 我无法升级到修复此问题的任何版本,我需要保持多平台兼容性,我的原始解决方案仍然是最佳选择。使用YUI组件但在IE上响应不好的任何其他人,也许您偶然发现了相同的问题,因此这是解决问题的一种方法。

1 个答案:

答案 0 :(得分:1)

在寻找完全相同的功能后,我在面向用户的代码中使用了模拟 - 它只是模仿点击而没有返回方法等。(简单的提交按钮或选择fil触发器)。

当我需要“复杂”功能时,我只需添加一个类或新ID,并在我的代码中添加新的委托或“on”方法 - 遵循:“如果函数需要响应用户操作或以编程方式调用,应该相应地写,并在后一种情况下直接调用。“ prinsipp。

总而言之 - 我使用模拟非常简单的效果,没有回调或其他“高级”的东西,并且(遗憾地)复制其他委托/在元素上模拟会很棘手......

还调查了你的方法(._node.click();),与simulate()相比,我看不出明显的区别......