0

我正在使用这个Multiselect jquery 组件。而且我不知道如何触发和订阅这件事的事件。(我是 js 新手)。

到目前为止,我一直在尝试的是在 ui.multiselect.js 文件的 _updateCount 函数中触发一个 collectionChanged 事件:

_updateCount: function() {
        this.selectedContainer.find('span.count').text(this.count + " " + $.ui.multiselect.locale.itemsCount);

        //How do I subscribe to the event?
        $(this).trigger('collectionChanged');
    }

然后我尝试从 asp.net 订阅 'collectionChanged' 事件:

  $('#<%= dropDown.ClientID %>').bind('collectionChanged', function ()
     { 
         alert("Changed!");
     });

生成的页面标记是这样的:

<select name="ctl06$dropDown" id="ctl06_dropDown" class="multiselect" multiple="multiple" name="countries[]">
        <option value="1134">A</option>
        <option value="1980">B</option>
        <option value="17789">C</option>
        <option value="180367">D</option>
        <option value="1990673">E</option>

    </select>

 <script type="text/javascript">
 $(function () { $('.multiselect').multiselect(); });

 $('#ctl06_dropDown').bind('collectionChanged', function ()
 {   
     //Not working (never triggerd)
     alert("Changed!");
 });

</script>

谢谢。

4

2 回答 2

2

thison函数的值_updateCount不是 DOM 元素。对于您正在尝试做的事情,如果我理解您的话,您需要在 DOM 元素中触发您的自定义事件,然后在同一个 DOM 元素上监听该自定义事件。所以你的代码有两个问题:第一个是你试图触发一个事件$(this),并且this不是你所期望的,第二个是你正在监听一个从不触发该事件的 DOM 元素上的事件. 如果您执行以下操作:

_updateCount: function() {
    this.selectedContainer.find('span.count').text(this.count + " " + $.ui.multiselect.locale.itemsCount);
    $("#ctl06_dropDown").trigger("collectionChanged");
}

那么你的线路$('#ctl06_dropDown').bind('collectionChanged'...应该可以正常工作。

于 2012-07-04T06:47:56.847 回答
1

您使用的插件不支持事件。

使用它的下一个版本。 http://quasipartikel.at/multiselect_next/

如果在http://quasipartikel.at/multiselect_next/#optionTabs-3上有用示例代码解释的事件

您需要同时使用名为“selected”和“deselected”的事件。

于 2012-07-04T06:59:18.403 回答