我正在使用jquery-select2库来实现我的下拉列表。
就我而言,我希望能够在用户单击下拉列表中的选项后触发操作。但是,点击或更改事件似乎不起作用
哈姆尔文件:
%select.medium.name_selector.pull_left
%option.placeholder{value:"placeholder", disabled: "disabled", selected: "selected"} Start or find a conversation with a muser
%option{value: "nick"} nick
%option{value: "sam"} sam
%option{value: "john} john
咖啡脚本文件:
events:
"click option" : "displayChatScreen"
displayChatScreen: (e) ->
e.preventDefault()
nickname = @$("select.name_selector option:selected").val()
if nickname != "placeholder"
Backbone.history.navigate "messages/#{nickname}",
trigger: true
else
alert "You need to select a friend to chat"
一旦我更改了 select2 下拉框的选项,是否可以触发操作?
注意:我尝试了点击和更改事件,但它们都不起作用
时,您不能像使用普通<select>
小部件那样使用正常的change
事件,但实际上您需要将displayChatScreen
方法附加到 select2 提供的change
处理程序。
例如
$('select.medium.name_selector').on('change', this.displayChatScreen);
假设这是 select2 小部件的选择器,并且您在适当的上下文中运行它。
当您使用 Backbone 提供的默认events
哈希时,您实际上是在这样做:
$el.on('change', 'option', this.displayChatScreen);
由于 select2 实际上替换了<select>
(因此<option>
标签替换为<ul>
<li>
对),因此您实际上永远不会收到浏览器事件。
此外,change
事件在父<select>
而不是<option>
元素上触发。
您可以通过不呈现选项并在初始化时将其作为选项传递给 select2 来避免此问题。
您可以像这样制作输入标签:
<input name="someName" value="selectedValues">
然后使用如下选项初始化 select2: $('input[name="SomeName"]').select2(options);
这样做将允许您安全地侦听对输入的更改,就像您经常使用事件哈希一样。