【问题标题】:jquery-ui selectmenu - Encountered "no such method 'instance' for menu widget instance" while loading dropdown options dynamicallyjquery-ui selectmenu - 在动态加载下拉选项时遇到“菜单小部件实例没有这样的方法'实例'”
【发布时间】:2017-12-28 20:02:48
【问题描述】:

我有一个 ID 为 TestList 的下拉列表(选择列表)。

我想在 jQuery UI 中将其用作 selectmenu。这个下拉列表是动态填充的,所以最初这个选择列表没有选项。 在脚本部分,我首先使用选择菜单初始化选择列表:

$("#TestList").selectmenu();

接下来,我想用数据动态填充它,所以我这样做:

for (var i = 0; i < data.length; i++) {           
   $('#TestList').val(data[i]);
    $("#TestList").selectmenu("refresh");
} 

但问题是,它会抛出 Uncaught Error: no such method 'instance' for menu widget instance.

我关注了How to select an option in a jQuery ui selectmenu dynamically?,但问题仍然存在。 我正在使用最新的 jQuery UI 包(jquery-ui-1.12.1.custom)和 jQuery 1.9 请帮我解决这个问题.. 列表:

【问题讨论】:

  • 请在您的源代码中提供data 的数组吗?您是否要选择值为refresh 的选项?
  • 你是在问data的潜在价值吗?如果是这样,那么数组将包含颜色值,如“红色”、“蓝色”、“绿色”等。另外,是的,我想将选定的值存储在 DB 中,因此我使用refresh。

标签: javascript jquery jquery-ui jquery-ui-selectmenu


【解决方案1】:

我创建了一个DEMO。

这个演示:

  1. 动态初始化 HTML 下拉列表中的 selectmenu 小部件
  2. 动态创建/加载选项
  3. 在下拉列表中动态选择特定选项

我觉得对你有很大帮助!

这是来自 DEMO 的完整代码:

<script>
  $( function() {
    $('#initialize').click(function() {
        $( "#speed" ).selectmenu();
      $('#status').html('The widget is now initialized. But it is still empty and does not contain any options.');
      $('#add_options').removeAttr('disabled');
      $('#initialize').attr('disabled','');
    });


        $('#add_options').click(function() {
        // Add a new option to the dropdown
        $('#speed').append($('<option>', {
          value: 1,
          text: 'Option 1'
      }));
      $('#speed').append($('<option>', {
          value: 2,
          text: 'Option 2'
      }));
      $('#speed').append($('<option>', {
          value: 3,
          text: 'Option 3'
      }));
      //Refresh the selectmenu widget so the newly added options to the dropdown are now loaded properly
      $( '#speed' ).selectmenu( "refresh" );

      $('#status').html('The new options are now added dynamically!!');
      $('#select_option').removeAttr('disabled');
      $('#add_options').attr('disabled','');
    });

    $('#select_option').click(function() {
        $( '#speed' ).val(3);
      $( '#speed' ).selectmenu( "refresh" );

      $('#status').html('Options 3 is now selected!!');
      $('#select_option').attr('disabled','');
    }); 
  });
  </script>

 <div class="demo">
 <input type="button" value="Initialize the Widget" id="initialize"/>
 <br><br>
 <input type="button" value="Dynamically Add New Options" id="add_options" disabled/>
 <br><br>
 <input type="button" value="Select the 'Option 3'" id="select_option" disabled/>
<form action="#">
  <br>
  <div id="status" style="font-weight:bold;">This is the simple default HTML dropdown</div>
  <br>
    <label for="speed">Select a speed</label>
    <select name="speed" id="speed">
    </select>

</form>

</div>

【讨论】:

  • 这里的工作做得很棒,伙计!但是我仍然在页面加载时收到Uncaught Error: no such method 'instance' for menu widget instance.,即即使在填充列表之前,控制台上也会显示错误。我正在使用 jQuery 1.9。是这个原因吗?
  • 我猜是因为我在document.ready函数里面写了所以它似乎已经解决了:)
  • 很高兴为您提供帮助:)
  • 选择列表看起来很奇怪。它的高度和宽度不合适。这最初是一个引导选择列表。这是造成这种畸形的原因吗?
  • 如果你会使用多个 jquery 插件来操作 HTML 元素,那么它们肯定会导致布局问题,因为 css 规则会冲突
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-24
  • 1970-01-01
  • 2013-02-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多