Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 使用ajax在名称为“[]”的多个选择框中选择多个选项_Jquery_Drop Down Menu - Fatal编程技术网

Jquery 使用ajax在名称为“[]”的多个选择框中选择多个选项

Jquery 使用ajax在名称为“[]”的多个选择框中选择多个选项,jquery,drop-down-menu,Jquery,Drop Down Menu,我试图从从ajax接收的数据中动态地选择多个选择框中的选项 HTML 但它不起作用。它不起作用,因为jQuery认为sbox[]是ID选择器sbox,其属性选择器[]为空,无效 您可以转义方括号,使选择器变为sbox\[\]。但是在你的身份证中,方括号是不需要的;只需将其命名为id=sbox并选择sbox。方括号仅在name属性中是必要的,用于将select指定为值数组。在每个循环中使用值,而不是v,就像在声明中命名参数一样 $.each(splitText, function(k,v)

我试图从从ajax接收的数据中动态地选择多个选择框中的选项

HTML


但它不起作用。

它不起作用,因为jQuery认为sbox[]是ID选择器sbox,其属性选择器[]为空,无效

您可以转义方括号,使选择器变为sbox\[\]。但是在你的身份证中,方括号是不需要的;只需将其命名为id=sbox并选择sbox。方括号仅在name属性中是必要的,用于将select指定为值数组。

在每个循环中使用值,而不是v,就像在声明中命名参数一样

   $.each(splitText, function(k,v) {
       $("#sbox[]").children("option[value="+v+"]").attr("selected","selected");
   });

如果这是您使用的确切代码,则值以$为单位。每个值都未定义。您正在函数中使用v标识符。应该是

$("#sbox[]").children("option[value="+v+"]").attr("selected","selected");
您应该更改id。从w3开始,不允许使用[]符号

指定元素的唯一id。命名规则:

必须以字母a-Z或a-Z开头 可后跟:字母A-Za-z, 数字0-9,连字符-, 下划线_,冒号:,和 时期。价值观是 区分大小写


如果你换了身份证就容易多了

如果您绝对必须这样做,则必须转义括号,因为它们在选择器语法中使用

change $("#sbox[]")

to $("#sbox\[\]")
试一试


这里有几个可能的问题,请尝试以下方法:

$.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选择器工作得很好,并且u也是允许的。因此,要在id中使用[]子字符串,您需要使用属性选择器来定位它。或者,如果它是唯一以sbox开头的id,您可以尝试以下操作:$'[id^=sbox]'

另一个可能需要修复的项目是设置所选属性。我不确定它是否如您所期望的那样工作,但是如上所示寻址选项DOM对象应该可以

最后一个是次要的修正——您在每个循环迭代中定位元素,很可能您希望在循环开始之前定位一次


希望这有帮助

嗯,通常不需要,但表单是通过序列化字段提交的,所以要将其作为数组获取,我需要使用括号。@mrN:这是名称属性,而不是id。@BoltClock,如果我不使用id中的括号,可以吗。@mrN:这不是我说的吗?再看一遍我的答案,我对它进行了一些编辑,以便详细说明。@BoltClock,不,我只是不认为是id引起了它。但是谢谢,它成功了。你介意更新你的答案吗?我想接受它。写+v+而不是+value+已经说了两遍了,这是一个打字错误,我把它修好了。哦。。。哎呀,那是个打字错误,所以
change $("#sbox[]")

to $("#sbox\[\]")
$.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");
       });
    }
);
$.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;
       });
   });
}
);