使用jQuery检查复选框值时出错

时间:2015-11-26 08:11:27

标签: javascript php jquery

嗯......标题可能看起来很模糊但问题对我来说有点新鲜。

我有一个复选框,使用循环设置n次(在php中)。

<input class="shiftt_class" type="checkbox" name="multiSelect[]" value="">

并且设置如下。

<?php foreach($depts['shifts'] as $shfts){?>
   <span>
     <input class="shiftt_class" type="checkbox" name="multiSelect[]" value="<?php echo $shfts['shift_id'];?>">

     <select name="nottime<?php echo $shfts['shift_id']; ?>" class="notification_time_class">
        <option value="">Set Time</option>                     
        <option value="11:00" >11:00</option>                               
        <option value="12:00" >12:00</option>                     
        <option value="13:00">13:00</option>                           
      </select>                      
  </span>
<?php }?>

点按一下按钮,我尝试根据我使用jQuery的JSON响应设置选中的复选框。

我的JSON回复:

[{"shift_id":"2"},{"shift_id":"3"}]

jQuery代码:

如果shifts是我的JSON响应,那么

           if(shifts.length>0)
           {
             $.each(shifts,function(index,shift) 
             {
                    if($(".shiftt_class").val()==shift.shift_id)
                    {
                        alert('ddd');
                        $(".shiftt_class").prop("checked", true);                           
                    }
              });//end of each function

            }

我收到警报,但没有设置复选框。 我也要尝试相同的方法来设置选择框。我哪里出错了?

更新:我的jQuery函数

        $.ajax({
             url: post_url,
             data:{staff_id : staff_id,csrf_test_name : csrf_token},
             type: "POST",
             dataType: 'json',
             beforeSend: function ( xhr ) {
             //Add your image loader here
             $('#select_loader').show(); // Ajax Loader Show
             },
             success: function(shifts) 
            { 
                 $('#select_loader').hide();

                $.each(shifts, function (index, shift) {$('.shiftt_class[value="' + shift.shift_id + '"]').prop("checked", true);
}); 
            }
        });//end of ajax

1 个答案:

答案 0 :(得分:3)

问题是因为.shiftt_class块中的each()选择器正在检索所有元素。致电val()就是令人困惑的问题。您应该查找.shiftt_class元素,其中value与迭代中的shift_id匹配。为此,您可以使用属性选择器。试试这个:

$.each(shifts, function (index, shift) {
    $('.shiftt_class[value="' + shift.shift_id + '"]').prop("checked", true);
});

Example fidddle

另请注意,对返回数据的length检查是多余的,因为无论如何循环都不会在空数组上执行。