有一个用ExtJS 3.1实现的网站。我想要自动填写一些字段。问题是,一些字段在自动填充时没有被ExtJS验证。
我可以通过触发ExtJS的模糊事件来触发验证:
field.fireEvent('blur', field);不过,我不想这么做。我希望由通过jQuery触发的正常事件触发验证:
$field.blur();我在这里问的是以下内容:
如何以浏览器相同的方式触发文本框的模糊事件,以便ExtJS的事件处理程序也能运行?
顺便说一句:我不想手动触发ExtJS事件的原因很简单:这个解决方案似乎适用于ExtJA 3.1,但不再适用于4.2,我不想为每个版本的ExtJS编写特殊的处理代码。
如果你想玩一玩:
以下是网址: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); };当您在City字段中单击,然后在其他字段中单击时,您将在控制台中看到输出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事件之间的桥梁,将不胜感激。
发布于 2014-08-22 14:26:06
用代码来模拟本机事件确实有效(在非IE浏览器中):
var event = document.createEvent('HTMLEvents');
event.initEvent('blur', true, true);
$city.get(0).dispatchEvent(event);但是,您应该避免这个问题,而不是通过使用字段的validator而不是模糊的事件侦听器来给它一个奇怪的解决方法。这样,字段的setValue方法将触发其验证.
如果您真的被它困住了,而不是通过模拟事件来增加一个(可能是脆弱的)复杂性层,我只需要直接调用字段的onBlur方法。这是由Ext添加到DOM中的处理程序。它存在于3.x和4.x中,它不依赖于特定的浏览器.
https://stackoverflow.com/questions/25443597
复制相似问题