2016-03-03 78 views
0

我有两个selectmenus,其中一个$('#parent')$('#members')菜单(通过HTML中的数据属性相关)中的某些选项有关。我有一个功能来限制“成员”中与父菜单中选择的选项相关的选项。selectmenuchange仅在第一个事件中追加对象列表

SCRIPT

$("#parent").selectmenu(); 
$("#members").selectmenu(); 

var allMembers = $('#members option'); // keep object list of all of the options for the select menu 

$("#parent").on("selectmenuchange", function() { 
    var someMembers = []; 
    var id = $('#parent option:selected').data('id'); 
    allMembers.each(function() { 
     if ($(this).data('parent-id') == id) { 
     someMembers.push($(this)) 
     } 
    }); 
    $('#members').empty().append(someMembers); 
}); 

目前,这个工作,但只在第一selectmenuchange事件 - 这是奇怪的,因为使用console.log()当阵列中的功能被重新创建,我可以看到的是,正确的有每次都被选中,他们只是不显示在菜单上随后的变化。

我想不通,如果这是selectmenuchangeempty().append()

HTML

<select name="members" id="members"> 
    <option data-id="101" data-parent-id="1">Name1</option> 
    <option data-id="102" data-parent-id="1">Name2</option> 
    <option data-id="103" data-parent-id="1">Name3</option> 
    <option data-id="104" data-parent-id="2">Name4</option> 
    <option data-id="105" data-parent-id="2">Name5</option> 
    <option data-id="106" data-parent-id="3">Name6</option> 
    <option data-id="107" data-parent-id="3">Name7</option> 
</select> 

<select name="parent" id="parent"> 
    <option data-id="1">Parent1</option> 
    <option data-id="2">Parent2</option> 
    <option data-id="3">Parent3</option> 
</select> 
+0

能不能请你太重视你的'html'? –

+0

很难,因为这些选项是从ajax请求中初步填充的,但我添加了它的外观。 – jmk

回答

1

options正在改变一个问题,但它不是由plugin创建的selectmenu反映。所以的方式之一就是你destroyre-initializeselectmenu如下:

$('#members').html(someMembers).selectmenu('destroy').selectmenu(); 

DEMO

+1

二十块大拇指!似乎counterintutive在添加html后销毁,但谢谢。 – jmk

+1

您可以切换进程​​...即“销毁”它,然后添加“html”,然后再次“重新启动”。这并不重要,因为您将选项添加到原始'select'元素,并且当您启动“插件”时,它将使用'html元素'创建自己的一组结构并使用样式进行渲染。所以没关系..检查'select'元素来查看我的意思..这里是** ['DEMO'](https://jsfiddle.net/Guruprasad_Rao/qtytjmys/1/)**。反正快乐编码.. :) –

+1

谢谢,非常有趣。将在我的项目中再次有用:) – jmk

0

代替selectmenu('destroy')和重新初始化选择菜单中,您还可以使用selectmenu('refresh')。清爽的声音比每次摧毁都好。

我已经更新古鲁普拉萨德饶拨弄刷新: fiddle