0

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

除了未选择所选选项之外,所有这些似乎都可以正常工作。检查 Chrome 的 Web 开发工具中的代码显示该selected="selected"属性存在。做一个console.log()选项:selected可以选择它们。但是,当我深入到一个特定的<option>并查看它时,它显示的selected属性设置为false.

世界卫生大会...?

我已经尝试在事后使用.select()和jQuery 方法来强制解决问题,但两者都没有产生任何影响。.attr("selected","selected")

其他人能弄清楚这里发生了什么吗?这可能只是我的无知,但这在我看来应该是可行的。

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

$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 );
}
4

2 回答 2

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>
于 2013-02-11T16:59:41.587 回答
0

事实证明,上面概述的代码对我描述的行为没有错。在它之后执行其他代码来重置表单输入。其他代码中的 jQuery 选择器写得太笼统了,并且在不应该的时候也选择了生成的选择字段。

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

于 2013-02-12T15:53:37.323 回答