我正在尝试从ajax收到的数据中动态选择多选框中的选项。
HTML
<select multiple="multiple" id="sbox[]" name="sbox[]">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
JQuery的
$.post(
"test.php",
{
action: "test"
},
function(data) {
//data received is in the format of "2,3"
splitText = data.split(",");
$.each(splitText, function(k,v) {
$("#sbox[]").children("option[value="+v+"]").attr("selected","selected");
});
}
);
但它没有用。
答案 0 :(得分:2)
试
$.post(
url: "test.php",
function(data) {
//data received is in the format of "2,3"
splitText = data.split(",");
$.each(splitText, function(k,v) {
$("#sbox\[\]").children("option[value="+v+"]").attr("selected","selected");
});
}
);
答案 1 :(得分:1)
它不起作用,因为jQuery认为#sbox[]
是具有空属性选择器#sbox
的ID选择器[]
,这是无效的。
您可以转义方括号,以便您的选择器变为#sbox\[\]
。但首先,您的身份证不需要方括号;只需将其命名为id="sbox"
并选择#sbox
即可。方括号仅在name
属性中用于将select指定为值数组。
答案 2 :(得分:0)
你在每个循环中使用value
而不是v
,就像参数在声明中命名一样
$.each(splitText, function(k,v) {
$("#sbox[]").children("option[value="+v+"]").attr("selected","selected");
});
答案 3 :(得分:0)
如果这是您使用的确切代码,则$ .each中的值未定义。您正在使用v标识符。应该像
$("#sbox[]").children("option[value="+v+"]").attr("selected","selected");
你应该改变身份证明。从w3起,不允许[]符号
指定元素的唯一ID。命名规则:
必须以字母A-Z或a-z开头 可以跟着:字母(A-Za-z), 数字(0-9),连字符(“ - ”), 下划线(“_”),冒号(“:”)和 句点(“。”)值是 区分大小写的
答案 4 :(得分:0)
如果您更改了ID,那会更容易。
如果绝对必须这样做,则必须转义括号,因为它们在选择器语法
中使用change $("#sbox[]")
to $("#sbox\[\]")
答案 5 :(得分:0)
这里有几个可能的问题,试试这个:
$.post(
"test.php",
{
action: "test"
},
function(data) {
//data received is in the format of "2,3"
var splitText = data.split(",");
var select = $('[id="sbox[]"]').get(0);
$.each(splitText, function(k,v) {
$.each(select.options, function(i, option) {
if(option.value == v)
option.selected = true;
else
option.selected = false;
});
});
}
);
第一件事是#id
选择器在id
为字母数字(-
且_
也允许)时效果很好。因此,要在id中使用[]
子字符串,您需要使用属性选择器来定位它。或者,如果它是唯一以sbox
开头的ID,您可以尝试:$('[id^=sbox]')
。
要修复的另一个项目是在selected
上设置<option>
属性。我不确定它是否按预期工作,但如上所示寻址Option
DOM对象应该可以正常工作。
最后一个是次要修正 - 你在每个循环迭代中找到<select>
元素,可能你想在循环开始之前做一次。
希望这会有所帮助。