从jQuery的或香草JavaScript事件触发合成ExtJS的事件(Trigger synthe

2019-11-03 07:11发布

存在一个ExtJS的3.1实现的一个网站。 我想自动预先填充一些字段。 问题是,某些字段不被验证的ExtJS时自动填充。
我可以解雇的ExtJS的模糊事件触发验证:

field.fireEvent('blur', field);

不过,我并不想这样做。 我想要验证通过正常的事件通过jQuery触发触发:

$field.blur();

什么我问这里是以下几点:
如何触发一个文本框的模糊事件以同样的方式浏览器做它,这样也ExtJS的事件处理程序的运行?

BTW:为什么我不想手动触发ExtJS的事件原因很简单:这种解决方案似乎为ExtJA 3.1工作,但不再是4.2,我不想写特殊处理代码的ExtJS的每个版本。


如果你想绕一点点玩:
这里是网址: https://www.pantaenius.com/en/service/login/request-a-quote.html?utm_source=http%3A%2F%2Fwww.pantaenius.com%2Fen%2Famerican-yacht-insurance html的&utm_medium =直接&domain_segment = 33
在Chrome中打开它,打开Chrome的开发者控制台,并粘贴以下文字:

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); };

当你在城市字段中单击,然后在其他一些领域,你会看到输出ExtJS blur fired! 在控制台中。 你会看到,当你执行相同的输出city.fireEvent('blur', city); 。 然而,你不会看到输出,当你执行$city.blur();$city.trigger('blur'); 要么

var event = document.createEvent('HTMLEvents');
event.initEvent('blur', true, true);
$city.get(0).dispatchEvent(event);

任何想法如何建立正常的事件和ExtJS的事件之间的这座桥将不胜感激。

Answer 1:

与你的代码位模拟机事件确实工作(在非IE浏览器):

var event = document.createEvent('HTMLEvents');
event.initEvent('blur', true, true);
$city.get(0).dispatchEvent(event);

然而,你应该避免的问题,而不是给它一个奇怪的治疗,通过validator的领域,而不是模糊的事件监听器。 这样, setValue领域的方法,将触发其验证...

如果你真的坚持了下来的时候,而不是通过模拟事件增加复杂性的(可能是脆弱的)层,我只是调用onBlur直接字段的方法。 这就是被添加到由分机的DOM处理程序。 它存在于3.x和4.x,它不依赖于特定的浏览器...



文章来源: Trigger synthetic ExtJS event from jQuery or vanilla javascript event