2012-01-12 167 views
0

该问题已被多次询问,但这不是重复。我正在使用for循环搜索包括select,input等元素的div。它将类名称与对象参数匹配,如果匹配,则设置元素的值。用jQuery设置选择下拉菜单

for(var i in obj) { 
    if(obj.hasOwnProperty(i)) { 
     $(editClone).find('.' +i).val(obj[i]); 
    } 
} 

它适用于输入要素精细,但与选择的元素它会删除所有的选项,只是将实际元素标签上的值。

这是select语句之前,我跑我的javascript:

<select class="type"> 
    <option value="Home">Home</option> 
    <option value="Work">Work</option> 
    <option value="Mobile">Mobile</option> 
    <option value="Other">Other</option> 
</select> 

后,我运行的代码(在Firebug验证检查):

<select class="type">Mobile</select> 

它为什么要这样做呢?我认为val()应该设置一个匹配的选项标签来选择。对象值和选项标签是匹配的,但它没有做到它应该做的。我在这里做错了什么?

原来我有DIV,我试图克隆嵌套在HTML中的错误位置以及javascript中的错误克隆调用。完全不相关的错误。下面的答案是正确的,它只是没有在我的情况下工作,因为我不明白我遇到的问题。

回答

0
<select class="type">Mobile</select> 

无效。一个选择需要有内部option标签它


这是你的代码的工作版本:

DEMO

<select class="type"> 
    <option value="0">0</option> 
    <option value="A">A</option> 
</select> 

脚本:

$(function() { 

    var obj = { type: "A" }; 

    var editClone = $(document); 

    for(var i in obj) { 
     if(obj.hasOwnProperty(i)) { 
      $(editClone).find('.' + i).val(obj[i]); 
     } 
    } 
}); 
+0

我希望我能说工作,但那正是我已经有的。我只是没有在我的示例代码中包含对象和editClone,因为它是无关紧要的。出于某种原因,val()将替换select语句内的html(),而不是选择选项并选择匹配的语句。 – ryandlf 2012-01-12 04:16:41

+0

Select类最初有选项,而Mobile就是其中一种选择。 JavaScript将使用Mobile替换所有选项。 – ryandlf 2012-01-12 04:17:28

+0

@ryandlf - 它不会取代任何html。这只是设置A选项,就像你想要的那样。检查铬开发工具或萤火虫中的HTML看看自己:) – 2012-01-12 04:27:07