2012-10-09 61 views
1

我正在使用jquery-select2库来实现我的下拉菜单。点击和更改事件不适用于jquery-select2选项

在我的情况下,我希望能够在用户点击下拉列表中的选项后触发一个动作。然而,点击或更改事件似乎并没有工作

HAML文件:

%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 

CoffeeScript的文件:

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下拉框的选项?

注:我已经尝试点击和更改事件,他们都没有工作

回答

4

有了选择2,你会为一个正常的<select>小部件就可以正常使用的change事件,但实际上你需要连接您的displayChatScreen方法到change handler provided by select2

例如

$('select.medium.name_selector').on('change', this.displayChatScreen); 

假设这是您的select2小部件的选择器,并且您正在相应的上下文中运行该选择器。

当您使用默认events哈希通过骨干提供,你真的这样做:

$el.on('change', 'option', this.displayChatScreen); 

由于选择2实际上取代了<select>(因此<option>标签与<ul><li>对)你永远不会实际上收到浏览器事件。

此外,change事件触发父代<select>而不是<option>元素。

0

您可以通过不渲染选项,而是在初始化时将其作为选项传递给select2来避免所有问题。 。

您可以作出这样的输入标签:

<input name="someName" value="selectedValues"> 

然后用这样的选项初始化选择2: $( '输入[名称= “SomeName”]')选择2(选件);

这样做可以让您像使用事件散列一样安全地监听输入的更改。