在 Dojo CheckBox 中手动触发点击事件
Posted
技术标签:
【中文标题】在 Dojo CheckBox 中手动触发点击事件【英文标题】:Trigger click event manually in Dojo CheckBox 【发布时间】:2014-08-03 00:58:08 【问题描述】:在我的应用程序中,我有以下代码:
postCreate: function()
// ...
// Change the listWidget's order depending on whether the checkbox is
// ticked or not
self.extraWidget.orderByNameWidget.on( 'click', function( e )
var orderByNameWidget = this;
field = orderByNameWidget.get('value') ? 'firstName' : 'lastName';
// Make up the collection with the initial filters
var collection = self.store;
if( self.initialFilter ) collection = collection.filter( self.initialFilter );
collection = collection.sort( field );
self.listWidget.set('collection', collection);
);
此代码在那里,以便用户可以单击复选框 (orderByNameWidget),并更改联系人的排序。 orderByNameWidget 是一个普通的 Dojo CheckBox。
现在,我有一个全局设置,该值应该从什么开始。更简洁的处理方法是设置复选框的值,然后触发事件:
// Artificially emit the initial click if the default says so
if( ConfigVars.workspacesUsersInfo.orderByNameDefault )
self.extraWidget.orderByNameWidget.set( 'value', true );
self.extraWidget.orderByNameWidget.emit( 'click', bubbles: true, cancelable: true );
虽然第一行有效(设置小部件),但第二行却没有——实际上从未为小部件触发 'click' 事件。
我尝试了每一种可能的组合,在 domNode 等上发出这个事件——但不,它似乎不想做任何事情。 在 Button.html(CheckBox 的基础)中,Dojo 有:
data-dojo-attach-event="ondijitclick:__onClick"
我想知道这是否是问题所在。那么...我应该为复选框单击的 full 模拟写什么?有什么指点吗?
【问题讨论】:
【参考方案1】:您为什么不能使用change
事件而不是click
开始?这应该会在用户点击和程序更改时触发。 (还有键盘事件,就此而言,click
可能不会触发。)
【讨论】:
您的意思是,发出更改事件而不是点击? 我的意思是,Ken,你能看出我的目的是手动触发事件,而不是把自己附加到事件中吗? 我的意思是,当您以编程方式设置值时,change
事件已经触发,这看起来就像您正在尝试做的事情。我想我不明白为什么当change
看起来正是你想要的时候,你为什么要专注于听和发出另一个事件。
你是完全正确的肯!现在,问题仍然存在:为什么不以编程方式发出点击事件?我实际上从未设法手动发出事件,并让事件的回调触发。这是为什么呢?
我很确定_WidgetBase#emit
总是发出一个 DOM 事件,而根据小部件的不同,widget.on('click', ...)
实际上可能正在处理一个方法,而不是监听一个 DOM 事件。 Dijit 的 on
的反向兼容代码并不十分简单。以上是关于在 Dojo CheckBox 中手动触发点击事件的主要内容,如果未能解决你的问题,请参考以下文章
dojo.dijit.Button 触发 onclick 事件两次
在自定义控件中,有CheckBox控件,当触发OnCheckedChanged事件时
C# Winform 点击TreeView控件节点的CheckBox不触发NodeMouseClick事件的做法
WinForms dataBinding 触发 2 次 CheckedChanged 事件,使 checkBox 不可点击