我有一个表单,用户可以提交表单以指示需要更新的系统。在表单中,他们可以动态地向表单添加系统,因此我没有可用的唯一ID。在表单中,他们必须选择一个平台(unix,hp,wintel等),然后选择相应的模型来选择平台 - 思考链式选择。当更改“项目”中的第一个选定列表时,进行ajax调用以获取第二个选择列表的值。如何仅为相应的链式选择更新“项目”中的第二个选择列表?
我正在使用克隆方法来允许用户向表单添加项目。因此,id在页面上不再是唯一的,所以我正在使用该类来确定哪个选择按钮发生了变化。它现在的工作方式,每个第二个选择列表都会更新,我只希望更新对应于第一个选择列表的选择链式选择列表。我相信next()就是答案,但我想我的语法不正确。
第一个选择列表的类是平台,第二个是模型。
更新每个第二个选择列表:$(“select.model”)。html(options)
没有更新:$(“select.model”)。next()。html(options);
任何帮助都将不胜感激。
<div id="mySelectArea">
<select id="myFirstOption" class="myFirstOption">
<option>1</option>
<option>2</option>
<option>3</option>
</select>
<select id="mySecondSelect" class="mySecondSelect">
<option>1</option>
<option>2</option>
<option>3</option>
</select>
</div>
<div id="mySelectArea">
<select id="myFirstOption" class="myFirstOption">
<option>1</option>
<option>2</option>
<option>3</option>
</select>
<select id="mySecondSelect" class="mySecondSelect">
<option>1</option>
<option>2</option>
<option>3</option>
</select>
</div>
<script>
jQuery(document).ready(function()
{
$(".myFirstOption").live("change", function() {
$.getJSON("live_getModels.cfm",{platform: $(this).val()},
function(j){
var options = '';
for (var i = 0; i < j.length; i++)
{
options += '<option value="' + j[i].optionValue + '">' + j[i].optionDisplay + '</option>';
}
$(this).next("#mySecondSelect").html(options);
});
});
});
</script>
以下是更准确演示的示例JSON结果:
[{"optionValue":"", "optionDisplay":"Select Model"},{"optionValue":"TBD", "optionDisplay":"TBD"},{"optionValue":"SCCM", "optionDisplay":"SCCM-standalone"},{"optionValue":"Manual", "optionDisplay":"Manual-standalone"},{"optionValue":"SCCM-VMWare", "optionDisplay":"SCCM-VMWare"},{"optionValue":"Manual-VMWare", "optionDisplay":"Manual-VMWare"},{"optionValue":"SCCM Hybrid", "optionDisplay":"SCCM Hybrid"},{"optionValue":"SCCM Hybrid VMWare", "optionDisplay":"SCCM Hybrid VMWare"},{"optionValue":"SCCM Offline", "optionDisplay":"SCCM Offline"},{"optionValue":"SCCM Offline - VMWare", "optionDisplay":"SCCM Offline - VMWare"}]
答案 0 :(得分:1)
如果我正确阅读,原因.next()无效是因为您选择了要更新的下拉列表,然后转到下一个。如果你的(伪)html看起来像这样
<div id="mySelectArea">
<select id="myFirstOption">
<option>1</option>
</select>
<select id="mySecondSelect">
<option>2</option>
</select>
</div>
并且您有第一次选择代码的更改事件
$(this).next("#mySecondSelect").options(html);
根据您的修改,将您的javascript更改为:
jQuery(document).ready(function() {
$(".myFirstOption").live("change", function() {
var firstOption = $(this);
$.getJSON("live_getModels.cfm",{platform: $(this).val()},
function(j){
var options = '';
for (var i = 0; i < j.length; i++){
options += '<option value="' + j[i].optionValue + '">' + j[i].optionDisplay + '</option>';
}
firstOption.next("#mySecondSelect").html(options);
});
});
});
我在ajax成功函数this = window中相对肯定,所以你必须保存对原始对象的引用。
答案 1 :(得分:0)
为什么不让用户填写包含所有信息的表单,并将它们仅在末尾附加到列表中?
这样您就不必担心 n 下拉菜单了。