在 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 中手动触发点击事件的主要内容,如果未能解决你的问题,请参考以下文章

解决label 和checkbox点击事件触发两次问题

wpf点击checkbox触发了两次

dojo.dijit.Button 触发 onclick 事件两次

在自定义控件中,有CheckBox控件,当触发OnCheckedChanged事件时

C# Winform 点击TreeView控件节点的CheckBox不触发NodeMouseClick事件的做法

WinForms dataBinding 触发 2 次 CheckedChanged 事件,使 checkBox 不可点击