首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从ExtJS事件或香草javascript事件触发合成jQuery事件

从ExtJS事件或香草javascript事件触发合成jQuery事件
EN

Stack Overflow用户
提问于 2014-08-22 09:19:58
回答 1查看 421关注 0票数 1

有一个用ExtJS 3.1实现的网站。我想要自动填写一些字段。问题是,一些字段在自动填充时没有被ExtJS验证。

我可以通过触发ExtJS的模糊事件来触发验证:

代码语言:javascript
复制
field.fireEvent('blur', field);

不过,我不想这么做。我希望由通过jQuery触发的正常事件触发验证:

代码语言:javascript
复制
$field.blur();

我在这里问的是以下内容:

如何以浏览器相同的方式触发文本框的模糊事件,以便ExtJS的事件处理程序也能运行?

顺便说一句:我不想手动触发ExtJS事件的原因很简单:这个解决方案似乎适用于ExtJA 3.1,但不再适用于4.2,我不想为每个版本的ExtJS编写特殊的处理代码。

如果你想玩一玩:

以下是网址:segment=33

在Chrome中打开它,打开Chrome的开发控制台并粘贴以下文本:

代码语言:javascript
复制
delete console.log

var $city = jQuery('#ext-comp-1080');
var city = Ext.ComponentMgr.all.filterBy(function(x) { return x.isXType('combo') && x.id==='ext-comp-1080'; }).items[0];

var blurEventFireFn = city.events.blur.listeners[0].fireFn;

city.events.blur.listeners[0].fireFn = function(field) { console.log('ExtJS blur fired!'); blurEventFireFn(field); };

当您在City字段中单击,然后在其他字段中单击时,您将在控制台中看到输出ExtJS blur fired!。在执行city.fireEvent('blur', city);时,您将看到相同的输出。但是,在执行$city.blur();$city.trigger('blur');

代码语言:javascript
复制
var event = document.createEvent('HTMLEvents');
event.initEvent('blur', true, true);
$city.get(0).dispatchEvent(event);

任何想法,如何创建正常事件和ExtJS事件之间的桥梁,将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2014-08-22 14:26:06

用代码来模拟本机事件确实有效(在非IE浏览器中):

代码语言:javascript
复制
var event = document.createEvent('HTMLEvents');
event.initEvent('blur', true, true);
$city.get(0).dispatchEvent(event);

但是,您应该避免这个问题,而不是通过使用字段的validator而不是模糊的事件侦听器来给它一个奇怪的解决方法。这样,字段的setValue方法将触发其验证.

如果您真的被它困住了,而不是通过模拟事件来增加一个(可能是脆弱的)复杂性层,我只需要直接调用字段的onBlur方法。这是由Ext添加到DOM中的处理程序。它存在于3.x和4.x中,它不依赖于特定的浏览器.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25443597

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档