Javascript ExtJs手动触发点击事件,按钮参数不同于鼠标点击
因此,我有一个登录控制器,您可以用鼠标单击登录或按Enter键,如下所示:Javascript ExtJs手动触发点击事件,按钮参数不同于鼠标点击,javascript,extjs,Javascript,Extjs,因此,我有一个登录控制器,您可以用鼠标单击登录或按Enter键,如下所示: Ext.define('My.controller.Login', { extend: 'Ext.app.Controller', init: function(application) { this.control({ "#idLogin button": {click: this.onButton}, "#idLogin form &g
Ext.define('My.controller.Login', {
extend: 'Ext.app.Controller',
init: function(application) {
this.control({
"#idLogin button": {click: this.onButton},
"#idLogin form > *": {specialkey: this.onKey}
});
},
onButton: function(button, e, eOpts) {
var win = button.up('window'); // the login window
//do more stuff...
},
onKey: function (field, el) {
if (el.getKey() == Ext.EventObject.ENTER) //ENTER key performs Login
Ext.getCmp('#idLogin button').fireEvent('click');
}
});
我意识到,当我用鼠标单击登录按钮时,onButton
函数正常工作,button.up()
返回登录窗口
但是,如果我按Enter键并启动onKey
函数来执行firevent('click')
,在这种情况下,onButton
会启动,但参数按钮
与鼠标单击时接收到的按钮
参数不同!这次,button.up()
函数未定义
问题是,为什么
firevent('click')
给我一个不同的按钮参数 您必须像这样使用fireEvent
功能:
var myBtn = Ext.getCmp('#idLogin button');
myBtn.fireEvent('click', myBtn);
试试看。因为按钮单击事件是框架触发的合成事件。它传递按钮实例和事件对象
fireEvent
的意思是“用这些参数通知任何订阅者此事件已发生”,而不是“在基础按钮上触发单击事件”
因此,您需要使用:
button.firevent('click',按钮)代码>
然而,这并没有真正意义,您只是添加了一个额外的间接层
为什么不把它抽象出来:
Ext.define('My.controller.Login', {
extend: 'Ext.app.Controller',
init: function(application) {
this.control({
"#idLogin button": {click: this.onButton},
"#idLogin form > *": {specialkey: this.onKey}
});
},
onButton: function(button, e, eOpts) {
this.doWindowFoo();
},
onKey: function (field, el) {
if (el.getKey() == Ext.EventObject.ENTER) //ENTER key performs Login
this.doWindowFoo();
},
doWindowFoo: function() {
// Assumes the window has an id idLogin, there are several other ways to get a reference
var win = Ext.getCmp('idLogin');
}
});
使用:
更一般的方法是:
document.querySelector("what-ever-el-selector").click();
在extjs 4.2.6上测试
干杯这将调用按钮中的处理程序函数,在我的情况下,它起作用了,因为我用附加功能和参数值更改覆盖了该按钮处理程序…(extjs 4.1.1)
谢谢:D现场,非常快@!为什么没有按钮。单击()
?非常感谢您的详细回答!Indianer以60秒的短距离击败了它。答案是“错”,你不应该在按钮上触发事件。这不是正确的方法。EvanT,从他那里收回“接受”是不好的XD,但我同意你已经在最佳实践中更深入地重构了功能。你已经把层弄平了。我希望我能给你10多个干杯~我并不真正关心公认的答案,只是指出您不应该在自己的代码中使用这种方法。如何使用本机js?“fireHandler”是一个私有函数,不应该依赖于:
document.querySelector("what-ever-el-selector").click();
Ext.getCmp('#idLogin button').handler();