我正在用Mysql做一个小项目作为后端,Flask作为框架。当我加载页面时,下拉列表应该填充数据库中的值(我的代码中的onLoading()。当我从下拉列表中选择“全部”选项时带有复选框(我可以选择多个),列表中的所有选项应该检查。当我取消选中“全部”时,所有选项都应该取消选中。我尝试了这段代码。但不知怎的,它不起作用。当我选择“全部”时,console.log正确打印“外部”和“内部”但其他选项没有得到检查。我可以知道我的代码中的缺陷在哪里。
HTML
<body onload=onLoading()>
<select id="nodes-select" multiple="multiple">
</select>
</body>
的Javascript
<script type="text/javascript">
$('#nodes-select').change(function(){
console.log("Outside");
if($("#nodes-select option[value='-1']").is(':selected'))
{
console.log("Inside");
$('#nodes-select option').prop('selected', true);
$("#nodes-select option[value='-1']").prop('selected', false);
}
});
function onLoading()
{
alert("Loaded");
$.get("/nodes",function(data,status)
{
var tmp = data.output;
console.log(tmp);
$('#nodes-select').append($('<option>', {
value: -1,
text : "All"
}));
for(var i =0;i<tmp.length;i++)
{
console.log(tmp[i]);
$('#nodes-select').append($('<option>', {
value: tmp[i],
text : tmp[i]
}));
}
$('#nodes-select').multiselect('rebuild');
});
}
</script>
答案 0 :(得分:2)
这是因为您使用的是multi-select
插件。
实际的select
正在被漂亮的refresh
取代。 (并且它们不共享属性的双向绑定)。
因此,您需要在更改select
元素后调用$('#nodes-select').change(function() {
console.log("Outside");
if ($("#nodes-select option[value='-1']").is(':selected')) {
console.log("Inside");
$('#nodes-select option').prop('selected', true);
$("#nodes-select option[value='-1']").prop('selected', false);
}
// add the following line to refresh the multiselect element.
$('#nodes-select').multiselect('refresh');
});
方法。
tabindex="600"