我正在构建一个基于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 );
}
答案 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元素而不是生成字符串,这更容易阅读。万岁因无意的副作用。