在For循环中如何获取Chosen Multiselect的选定值

6
这是我的视图文件代码。
<?php for($i=0; $i<4; $i++)  { ?>
 <div class="box22">
      <div class="mcm">
           <input type="text" placeholder="Myself" id="coworkers" name="coworkers[]" />
           <span class="bar"></span>
      </div>

      <div class="select2">
       <select id="category_<?php echo $i; ?>" name="category[]" class="chosen-select ref-sel1" multiple >
           <?php
           foreach($genre as $gen){
                echo '<option value='.$gen->genre_id.'>'.$gen->genre_name.'</option>';
           } 
           ?>
       </select>
      </div>
 </div>
<?php } ?> 

我的脚本:当我从选项中选择一个或多个时,它不会进入脚本。如何在循环中获取多个值。

    $(document).ready(function()
    {
        $('form#shortfilm').submit(function(e) 
        {
            e.preventDefault();
            var form = $(this);
            var foo = [];
            $('#category :selected').each(function(i, selected){
              foo[i] = $(selected).text();
            });
        });
    });

可能是重复的问题:如何使用jQuery获取多选框的值? - WebInsight
我尝试过了,但没有响应。 - shruthi
为什么你把所有的选择框都命名为相同的名称?这样的话,同一个名称可能会被覆盖。 - Sunny S.M
请记住,每当您想通过jQuery访问具有ID属性的值时,ID应该是唯一的,不要重复,否则只有第一个元素会被注意到。 - Sunny S.M
修改你的 PHP 代码,使用类而不是 ID,这样你的代码就能正常工作了。 - Sunny S.M
显示剩余8条评论
3个回答

2

将文本更改为val()

 $('option:selected').each(function(i, selected){
              foo.push($(selected).val());
            });

或者:

var foo = [];
$('.box22').each(function(x,v){
var temp =[]
     $(v).find('option:selected').each(function(i, selected){
        temp.push($(selected).val());
     });
     foo.push(temp)
});

点击此处查看第二种选择的演示


现在我检查了一下,发现选择的值只显示为第一个选项。但是推送元素没有起作用。 - shruthi
单个第一选项是什么意思? - madalinivascu
@madalinivascu 谢谢回复,问题是关于 jsfiddle 的演示不起作用,我正在寻找类似于这个的解决方案。你有什么想法如何实现? - sairfan

2
请运行以下示例代码。这可能会对你有所帮助。
<html>
<head>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"></script>
</head>
<body>
<form id="shortfilm" name="data">
<?php $genre=array(1=>'AAAAAAAAAAAAAA',2=>'BBBBBBBBBBBBBBB',3=>'CCCCCCCCC',4=>'DDDDDDDDDDDDDD',5=>'EEEEEEEEEEEEEEE');
for($i=0; $i<4; $i++)  { ?>
 <div class="box22">
      <div class="mcm">
           <input type="text" placeholder="Myself" id="coworkers" name="coworkers<?php echo$i?>[]" />
           <span class="bar"></span>
      </div>

      <div class="select2">
       <select class="category" name="category<?php echo$i?>[]" class="chosen-select ref-sel1" multiple >
           <?php
           foreach($genre as $key => $gen){
                echo '<option value='.$key.'>'.$gen.'</option>';
           } 
           ?>
       </select>
      </div>
 </div>
<?php } ?> 
<input type="submit" value="submit" />
</form>
<script>
$(document).ready(function()
{
    $('form#shortfilm').submit(function(e) 
    {
        e.preventDefault();
        var form = $(this);
        var foo = [];
        $('.category :selected').each(function(i, selected){
          foo[i] = $(selected).text();
        });
        console.log(foo);
    });
});
</script>
</body>
</html>

1

在多选列表上使用.val()函数将返回所选值的数组:

var selectedValues = $('#category').val();

在您的html中,<select id="category" multiple="multiple">

还应将$gen->genre_id的值放入变量中,如下所示:

foreach($genre as $gen){
$genId = $gen->genre_id;
$genName = $gen->genre_name;
            echo '<option value='.$genId.'>'.$genName.'</option>';
       } 

此外,在for循环中,<select id="category"将会有许多具有相同id的选择元素,请将其更改为category[$i]或使用class。

@jana 将此代码添加到程序中,告诉我它是否正常工作。 - WebInsight
现在请执行此操作并进行检查。 - WebInsight
修改了你的回答,你必须停止循环具有相同ID的选择元素,使用类代替或将循环编号附加到ID。 - WebInsight
你能给我点个赞吗?:) 因为我的回答在某种程度上是有用的。 - WebInsight
我声望低,无法点赞。等我提高了声望,我会点赞的。 - shruthi
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接