在Ember.js应用程序中选择了未触发的选择事件
我在Ember应用程序中的表单中具有以下字段结构:在Ember.js应用程序中选择了未触发的选择事件,ember.js,jquery-chosen,Ember.js,Jquery Chosen,我在Ember应用程序中的表单中具有以下字段结构: <div class="box"> <label>Name</label> {{text-input value=model.name}} </div> <div class="box"> <label>Gender</label> {{chosen-select value=model.gender content=selectOptions
<div class="box">
<label>Name</label>
{{text-input value=model.name}}
</div>
<div class="box">
<label>Gender</label>
{{chosen-select value=model.gender content=selectOptions.genders}}
</div>
通过将click事件处理程序附加到文档,我能够捕获在声明此事件处理程序时不存在的.box
元素上的单击。结果是,每当单击.box
元素时,其中的文本输入字段(如果有)就会获得焦点
为您实现这一目标
我想为包含所选select的.box
元素实现等效行为,即在单击周围的.box
时,以编程方式打开select中的下拉列表
根据,如果我们希望以编程方式指示所选控件打开其下拉列表,则必须向其发送choosted:open
事件,因此尝试将其添加到上述代码中:
$(document).on 'click', '.box', ->
$(this).find('input').focus()
$(this).find('select').trigger('chosen:open')
而且它不起作用。它也没有给出任何错误。然后我注意到,如果我从浏览器的js控制台发出最后一行代码,它就可以工作了(当然,用.box
元素的引用替换.this
)。从控制台发出时,该框中相应的select将打开其下拉列表。但是当从上面的click事件处理程序发出时,它不起作用
所以我想我不需要直接在那个上下文中发出这个命令,而是需要使用一些余烬的Ember.run
函数,比如Ember.run.next
和其他一些函数。但是我运气不好,我尝试了各种各样的事情,甚至在一个小小的延迟后触发了事件
我希望这里有一些具有Ember.js专业知识的人能够对这个问题有所帮助。我假设问题是当ember出现时,因为如果我得到一个没有ember的等价html(来自提供我正在使用的html的前端设计器),那么它也可以从单击事件中完美地工作。因为您发布的代码与jquery相关,我怀疑它本身并不是一个余烬,而是与从模板/组件获得的DOM元素结构有关。请检查使用余烬(不工作的)和不使用余烬(工作的)得到的确切元素结构。如果可能的话,试着用一个简单的例子发布一篇文章。谢谢你的反馈。只是澄清一下。当我从控制台触发所选select上的
selected:open
事件时,它与ember一起工作,但当我在.box
元素的click事件处理程序上触发它时,它不起作用。不过,我会按照你的建议在emberjs.jsbin.com中重新创建整个内容,然后更新帖子。
$(document).on 'click', '.box', ->
$(this).find('input').focus()
$(this).find('select').trigger('chosen:open')