【问题标题】:jQuery Chosen plugin - first option doesn't trigger change event?jQuery Chosen 插件 - 第一个选项不会触发更改事件?
【发布时间】:2012-10-12 10:06:26
【问题描述】:

所以我使用了相当不错的 jQuery 插件 Chosen; http://harvesthq.github.com/chosen/

我正在做的实际上是以“非此即彼”的方式使用两个选择样式的下拉菜单,即用户需要从一个或另一个中选择一个选项。

因此,当用户选择其中一个下拉菜单时,另一个(通过 javascript)将设置回其默认禁用值。

两个下拉菜单都由一个隐藏参数支持,以实际保存所选值,无论它来自哪个下拉菜单。这是通过在 .chosen().change() 事件的两个下拉列表中设置侦听器来填充的。

唯一的问题是,当用户在任一下拉列表中选择第一个选项时,它似乎不会触发“更改”事件,我猜因为这似乎是已选择的选项,因此不是“改变”。但是两个下拉菜单的实际第一个选项(即在 jsp 中)是一个禁用选项,带有正常的“请选择”文本。

即使选择的选项已经被选中,是否有办法触发更改事件?还是只有一个“选择”事件即使没有发生变化也会触发?

【问题讨论】:

    标签: javascript jquery jquery-chosen


    【解决方案1】:

    您可以在 jquery 对象上使用 .trigger("change") 或 .change() 手动触发更改事件。

    【讨论】:

    • 问题是Chosen插件隐藏了很多。普通的选择对象实际上并没有显示出来,而是选择了自己的。
    • 但是当我使用选择时,我仍然可以在我的实际选择对象上触发事件。请你显示你的代码吗?
    • 他正在谈论在更改值后将 $('#selectId').change() 添加到您的选择中,以手动调用更改事件。我得到了同样的错误。我正在使用 jquery.val() 来更改选择的值。当我这样做然后选择第一个选项时,它不会触发更改事件。如果我选择任何其他选项,尽管它会触发更改事件,如果我选择任何其他选项然后选择第一个选项,它将触发更改事件。我认为手动设置 .val() 不太有效。
    • 如果我不使用 selected 进行选择,它可以工作。希望能帮助任何人解决此问题。
    【解决方案2】:

    这对我有用:

    //Get the dynamic id given to your select by Chosen
    var selId = $('your_select').attr('id');
    //Use that id to remove the dynamically created div (the foe select box Chosen creates)
    $('#'+ selId +'_chzn').remove();
    //Change the value of your select, trigger the change event, remove the chzn-done class, and restart chosen for that select
    $('#'+selId).val('your_new_value').change().removeClass('chzn-done').chosen();
    

    简而言之,您正在为您的选择硬重置选择。可能有比这更简单的方法,但这对我有用。

    【讨论】:

      【解决方案3】:

      我在使用 Select2 插件(重制选择插件)时遇到了同样的问题。

      当我将 Combobox 声明为 select2 时,我忘记了“allowClear: true”这一行。

      $('#selectLabelMap').select2({
                         placeholder: "Sélectionner un label",                 
                         allowClear: true    // <=  don't forget "allowClear: true (re-init the comboBox)
                     }        
      

      【讨论】:

        【解决方案4】:

        在 (DOM) 准备好时触发更改。

            jQuery(function ($) {
        
                $('#myselect').trigger("change");   
        
            });
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-12-05
          • 1970-01-01
          • 2016-10-20
          • 2013-07-19
          • 1970-01-01
          • 2012-10-26
          • 1970-01-01
          相关资源
          最近更新 更多