更改下拉列表的“选定”属性无法正常工作

时间:2015-12-14 10:00:43

标签: javascript jquery html

我在表单中有一个下拉列表,其中onchange事件由jquery获取侦听并导致AJAX调用。然后Jquery根据服务器的回答设置/删除selected属性:

$( document ).ready(function(){
    $("#user_select").on("change", function(){
        var value = $("#user_select").val();
        $.ajax({
            url: "../ajax/change_permission.php",
            method: "POST",
            data: { user_id: value }
        }).done(function(data){
            var i = 0;
            while(i < 4){
                $("#perm_"+i).attr("selected", false);
                $("#perm_"+i).removeClass("active_perm");
                i++;
            }
            $("#perm_"+data).attr("selected", true);
            $("#perm_"+data).addClass("active_perm");
        });
    });
});

在我的user_select下拉列表中是我的用户,如果我选择它,则应显示其权限。 表单(选择应设置为的位置)如下所示:

<select id="user_permission" class="form-control">
    <option id="perm_0" value="0">Berechtigungsstufe</option>
    <option id="perm_1" value="1">Administrator</option>
    <option id="perm_2" value="2">Super-User</option>
    <option id="perm_3" value="3">User</option>
</select>

现在的问题是,如果一个选项已被选中一次,则无法再将其设置为活动状态,或者更好地说,所选标签仍然适用于该选项,但它不会再被更改(只是留在选项零)。在我选择了每个选项一次后,选择看起来像这样:

<select id="user_permission" class="form-control">
    <option id="perm_0" value="0">Berechtigungsstufe</option>
    <option id="perm_1" value="1" class="">Administrator</option>
    <option id="perm_2" value="2" class="">Super-User</option>
    <option id="perm_3" value="3" class="">User</option>
</select>

selected="selected"属性仍会应用于该选项,但不再更改所选选项(显示不会更改)。已经认为它因为空类标记而烦恼,但是如果我将其删除它就没有任何改变。

有人知道可能导致这个问题的原因吗?

编辑:总而言之,JSfiddle只是没有随机值:p

编辑ANSWERE:Jquery“.attr”在Firefox 42.0中无法正常工作。相反,我使用了“。prop”,这是正确的。

2 个答案:

答案 0 :(得分:1)

为什么使用select下的选项,您可以直接使用$("#user_permission").val(1)

答案 1 :(得分:1)

Jquery有两个不同的函数attr()和prop()。这两个用于不同的目的。 attr适用于所有属性。道具是属性。在你的情况下,下拉元素&#34;选择&#34;不是属性。这是一个属性。因此,您应该使用如下的prop函数。

$("#perm_"+data).prop("selected", true);

注意:然而,一些现代浏览器适用于两者,但是为了跨浏览器兼容性,总是尝试使用正确的浏览器。