在多个选择框中选择多个选项,其名称中带有“[]”,带有ajax

时间:2011-04-06 07:39:57

标签: jquery drop-down-menu

我正在尝试从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");
       });
    }
);

但它没有用。

6 个答案:

答案 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>元素,可能你想在循环开始之前做一次。

希望这会有所帮助。