使用Jquery从复选框中提取数据

时间:2010-09-13 19:32:29

标签: php jquery forms

我对Jquery和javascript相当新,并且首先跳了起来并且有点卡住了。

我有一个页面,单击按钮可以通过AJAX调用打开一个小的叠加层,然后提供一大堆复选框,供用户选择要与关键字关联的标签。然后我尝试通过另一个ajax调用来处理复选框。到目前为止,一切看起来还不错,除了我无法获取勾选复选框的数据以及不通过表单的数据。

我正在使用jquery,PHP& MySQL组合;请参阅下面的代码段。

<form method="post" >
<h1>Categories</h1> 
<fieldset id="edit_box">
        <legend>Choose Tags</legend>

<?php
// $tags is an array with all the original values from the database, so a list of available tags and if they are set for each category
foreach($tags as $value){
        if(isset($value['set']) && $value['set'] ==1) $set = "checked = 'checked'"; else $set = "";
        echo'<p class="floatlist">
        <input type="checkbox" name="'.$value['id'].'" id="'.$value['id'].'" '.$set.' />
        <label for="'.$value['id'].'" class="inline">'.$value['name'].'</label>
</p>';
}
        ?>
<p><button type="button" id="update_tags">Save Changes</button></p>
</fieldset>     
</form> 

<script type="text/javascript">
        $("#update_tags").click(function(){
                var data = new Array();
                $('#edit_box input').each(function() {
                        var tagid = $(this).attr('id');
                        if($('#'+tagid ).attr('checked')){data[tagid] = '1';} else {data[tagid] = 0;}
                });

                $.post("inc/process_tags.php", { page: "update_tags", categories: data }, function(data){
                        var output = data;
                        $('#edit_box').html(output);

                });                             
        });

</script>

目前,我得到一个与原始选项相对应的数组(所以如果检查了第1项3和5项,它们会正确显示)但是如果我在提交之前更改变量,(更改它)所以检查了项目1 2和5)它仍然显示输出作为原始项目(1 3&amp; 5)被检查。我在这里缺少什么?

我不幸地可以访问我可以给你的实例。

提前致谢!

3 个答案:

答案 0 :(得分:0)

Jquery作为可以选择已检查元素的功能(适用于无线电和复选框)。看一下选中的选择器。

http://api.jquery.com/checked-selector/

答案 1 :(得分:0)

有两种选择:

如果您需要JS中选中的复选框(假设复选框共享一个公共类):

$(".checkbox_class:checked").each(function(){
   // All of the checked boxes are iterated, $(this).val();
});

如果您想要PHP中$ _POST对象中所选复选框的列表,您首先要将标记更改为每个复选框都有一个公用名称数组:

<input type="checkbox" name="tags[]" value="php the value" />

然后..在PHP中

print_r($_POST['tags']); // outputs array of all checked tags

答案 2 :(得分:0)

如果您只需要检查项目:

  $("#update_tags").bind("click", function(){
    var data = [];

    // :visible is optional
    $('#edit_box').find("input[type='checkbox']:checked:visible").each(function(){
      var $t = $(this),           // current checkbox
          id = $t.attr('id');     // checkbox id

      data[id] = '1';

      // insert additional code here

   });
  });

或者如果您想遍历所有复选框元素:

  $("#update_tags").bind("click", function(){
    var data = [];

    // :visible is optional
    $('#edit_box').find("input[type='checkbox']:visible").each(function(){
      var $t = $(this),           // current checkbox
          id = $t.attr('id');     // checkbox id

      data[id] = $t.is(":checked") ? '1' : '0';

     // insert additional code here

   });
  });

希望这会有所帮助。