在append()之后,所选选项未显示为已选中

时间:2013-02-11 16:33:11

标签: javascript jquery html dom

我正在构建一个基于JSON数据的HTML字符串。在HTML中是<select>及其<option> s。如果<option>的值与某些JSON数据相同,则它还包含选项标记的selected="selected"属性。在那之后,整个shebang被.append()显示。

除了未选择所选选项外,所有这些似乎都能正常工作。检查Chrome的Web开发工具中的代码会显示selected="selected"属性。执行console.log():selected选项可以选择它们。但是,当我向下钻取到特定<option>并查看它时,会将selected属性设置为false

什...?

我尝试在事后使用.select().attr("selected","selected") jQuery方法强制解决问题,但两者都没有任何区别。

其他人可以弄明白这里发生了什么吗?这可能只是我的无知,但在我看来,这应该是有效的。

参考代码。 dataArray是一个对象数组。 $display是HTML <table>包含的.append() jQuery:

$orderNumberField = jQuery("#orderNumber");
_orderNumberArray = $.parseJSON( $orderNumberField.val() );

for( n in dataArray ) {
    var _displayString = "";

        // ... other table data cells ...

    _displayString += "<td><select class='orderNumSelect'>";
    _displayString += " <option value=''></option>";
    for( i in _orderNumberArray ){
        _displayString += "<option value='" + _orderNumberArray[i] + "'";
        if( dataArray[n].orderNum == _orderNumberArray[i] ) _displayString += " selected='selected'";
        _displayString += ">" + _orderNumberArray[i] + "</option>";
    }
    _displayString += "</select></td>";

        // ... still other table data cells ...

    $display.append( _displayString );
}

2 个答案:

答案 0 :(得分:0)

我不确定你的代码没有用,但你可以尝试生成元素而不是附加文本。我测试了这段代码,它工作正常

<script>
    var dataArray=["test","testm2","Tasat3"];
        function append(){
            var td=document.createElement("td");
            var sel=document.createElement("select");
            var o=document.createElement("option");
            sel.appendChild(o);
            for (n in dataArray){
                o=document.createElement("option");
                o.value=dataArray[n];
                o.text=dataArray[n];
                if (n==1) o.selected=true;
                sel.appendChild(o);
            }
            td.appendChild(sel);

            document.getElementById("display").appendChild(td);
        }
        append();
    </script>

答案 1 :(得分:0)

事实证明,上面描述的代码对我所描述的行为没有错。之后还有其他代码执行,重置表单输入。其他代码中的jQuery选择器编写得过于普遍,并且在不应该生成的选择字段时也是如此。

感谢所有评论员。我最终重写代码以使用DOM元素而不是生成字符串,这更容易阅读。万岁因无意的副作用。