2010-07-21 77 views
0

我试图填充一个下拉当特定列表项选择在另一个下拉使用jQuery名单,但由于某些原因正在下降之外创建的选项下的下拉列表列表,这里是我的代码,问题添加选项来使用jQuery

function makeModel(obj){ 
    model = new Array(); 
    model[0] = new Array('212', 'Ace', 'Aceca', 'Cobra', 'Superblower'); 
    model[1] = new Array('145', '146', '147', '147 3 Door', '147 5 Door', '155', '156', '159', '164', '166', '33', '75', '90', 'Alfasud', 'Alfetta', 'Arna', 'Brera', 'GT', 'GTV', 'Giulietta', 'Gold Cloverleaf', 'Mito', 'SZ', 'Spider', 'Sprint'); 
    model[2] = new Array('Rocsta'); 

    var curSel=obj.options[obj.selectedIndex].value ; 
    var x; 

    $('#replace').html("<select name=\"test\" id=\"test\">"); 
    for (x in model[curSel]) 
    { 
     $('#replace').append("<option>" + model[curSel][x] + "</option>"); 
    } 
    $('#replace').append("</select>"); 

} 

的HTML:

<form> 
<fieldset>  
    <p> 
     <label for="test">Make: </label> 
     <select name="test" id="test" onchange="makeModel(this);"> 
     <option>Select one</option> 
     <option value="1">1</option> 
     <option value="2">2</option> 
     <option value="3">3</option> 
     </select> 
    </p> 
</fieldset> 
</form> 

<div id="replace"></div> 

我敢肯定它的地方,是一个逻辑上的错误在我的部分,但我无法找到它!

因此,任何帮助,将不胜感激,感谢名单!

回答

5

要附加到替换DIV中,不选择输入元素。

更改要附加到(而不是#replace,你会使用#TEST),但是被用于BOTH选择插入替换区域#TEST的ID什么,主要选择用于执行插入的输入。所以你需要改变它,像“子”,你最终得到这样的事情:

function makeModel(obj){ 
    model = new Array(); 
    model[0] = new Array('212', 'Ace', 'Aceca', 'Cobra', 'Superblower'); 
    model[1] = new Array('145', '146', '147', '147 3 Door', '147 5 Door', '155', '156', '159', '164', '166', '33', '75', '90', 'Alfasud', 'Alfetta', 'Arna', 'Brera', 'GT', 'GTV', 'Giulietta', 'Gold Cloverleaf', 'Mito', 'SZ', 'Spider', 'Sprint'); 
    model[2] = new Array('Rocsta'); 

    var curSel=obj.options[obj.selectedIndex].value ; 
    var x; 

    $('#replace').html("<select name=\"test\" id=\"sub\">"); 
    for (x in model[curSel]) 
    { 
     $('#sub').append("<option>" + model[curSel][x] + "</option>"); 
    } 

} 

这将做到这一点。 See here.

+0

感谢名单,这完美地工作! – Odyss3us 2010-07-21 13:20:52

2
$('#replace').append("</select>"); 

没有必要。并且实际上会创建另一个选择元素或者仅仅是错误。

在你的问题要附加的选项到div,没有实际的选择。我会像这样修复它。

function makeModel(obj){ 
    model = new Array(); 
    model[0] = new Array('212', 'Ace', 'Aceca', 'Cobra', 'Superblower'); 
    model[1] = new Array('145', '146', '147', '147 3 Door', '147 5 Door', '155', '156', '159', '164', '166', '33', '75', '90', 'Alfasud', 'Alfetta', 'Arna', 'Brera', 'GT', 'GTV', 'Giulietta', 'Gold Cloverleaf', 'Mito', 'SZ', 'Spider', 'Sprint'); 
    model[2] = new Array('Rocsta'); 

    var curSel=obj.options[obj.selectedIndex].value ; 
    var x; 

    var $replace = $('#replace'); 
    var $sel = $('<select name="test" id="sub">').appendTo($replace); 
    $.each(model[curSel], function(i,v){ 
    { 
     var $option = $("<option>" + v + "</option>"); 
     $sel.append($option); 
    }) 
} 

使用jQuery每个不如一般,而不是for in仿佛原型已经扩展,你可以拿起大量的垃圾,你怎么也没有想到!

+0

+1这是一个很好的观点 – cgp 2010-07-21 14:24:58