我计划在用户按空格键时以编程方式触发点击事件。我已经使用过fireEvent('点击')它正在使用chrome,但它不适用于IE-11。我也试过,针对IE的dispatchEvent但它抛出一个错误:"元素不支持方法或属性dispatchEvent"。请遵循以下代码。
onCustomRender: function(thisEl, args){
var fetchTrigger = thisEl.getTrigger('fetchID
fetchTrigger.el.on('keydown',function(e,thisEl){
if (e.keyCode === 32) {
//fetchTrigger.el.fireEvent('click'); //this is working in chrome //not working in IE and did not throwing error.
var evObj = document.createEvent('MouseEvents');
evObj.initEvent('click', true, false);
fetchTrigger.el.dispatchEvent(evObj);
}
});
}
请帮助 在此先感谢
答案 0 :(得分:0)
首先,您提供的代码中存在语法错误... 直接调用函数是最简单的(如Evan所说),但是如果你想保持控制器中的逻辑,你可以触发事件。否则你需要一些丑陋的代码来获得控制器,然后调用方法......
如果你不需要,我不喜欢激活事件并在'Ext.dom.Element'上附加监听器。只需使用你的ext元素..
以下是我要做的事情:
onCustomRender: function(thisEl, args){
var fetchTrigger = thisEl.getTrigger('fetchID');
fetchTrigger.on('keydown',function(trigger, e){
if (e.keyCode === 32) {
trigger.fireEvent('click', trigger);
}
});
}
甚至更好,使用控制器:
实现侦听器
init: function () {
this.control({
'#fetchID': { //you can optimize the componentQuery
keydown: this.onTriggerKeyDown,
click: this.onTriggerClick
}
});
},
和这样的方法:
onTriggerKeyDown: function(trigger, e){
if (e.keyCode === 32) {
this.onTriggerClick(trigger);
}
},
onTriggerClick: function(trigger) {
//do you thing!
}