jquery .prop()不用于带有复选框的下拉列表

时间:2015-10-15 17:16:39

标签: javascript jquery html ajax flask

我正在用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>

1 个答案:

答案 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"