如何通过jQuery序列化多个复选框值?

时间:2011-11-28 12:01:12

标签: javascript jquery post jquery-post

我将jQuery.post的简单示例修改为

  $("#searchForm").submit(function(event) {
    event.preventDefault(); 
    var $form = $( this ),
        term = $( "input[name^=tick]:checked" ).serialize(),
        url = $form.attr( 'action' );
    $.post( url, { ticks: term, id: '55' },
      function( data ) {
          $( "#result" ).empty().append( data );
      }
    );
  });

这适用于带有val()的单一复选框,但不适用于

中的多个复选框
<input type="checkbox" name="tick" value="'.$value.'" />

因为serialize() should generate标记:术语to be used as术语in $ .post`。

如何让serialize()$.post

生成适当的数据

注意:我不想序列化整个表单,只检查复选框INPUT的值。

6 个答案:

答案 0 :(得分:4)

你可以使用.serializeArray() 参考:http://api.jquery.com/serializeArray/

答案 1 :(得分:4)

简单的价值收藏家:) HTML

<input type="checkbox" class="selector" value="{value}"/>

JS

 var checked='';
            $('.selector:checked').each(function(){
                checked=checked+','+$(this).val();
            });

PHP

 $ids=explode(',',substr($_GET['param_with_checked_values'],1));

答案 2 :(得分:2)

name="tick"中的html代码更改name="tick[]"中,您只需使用$(this).serialize();发布所有已检查的值。

答案 3 :(得分:0)

term = $("#input[name^=tick]:checked").map(function () {
    return this.value;
}).get();
term.join();

答案 4 :(得分:0)

您仍然可以使用LocationManager并在.serializeArray中使用它,如下所示:

.post()

var postData = {}; var form = $('#formId').serializeArray(); for (var i = 0; i < form.length; i++) { if (form[i]['name'].endsWith('[]')) { var name = form[i]['name']; name = name.substring(0, name.length - 2); if (!(name in postData)) { postData[name] = []; } postData[name].push(form[i]['value']); } else { postData[form[i]['name']] = form[i]['value']; } } $.post('/endpoint', postData, function(response) { }, 'json'); 将包含除已禁用的表单元素之外的所有表单元素。所有复选框值都将作为数组传递,就像进行正常表单提交一样。

答案 5 :(得分:0)

let $form = $(".js-my-form");
let $disabled = $form.find(':input:disabled').removeAttr('disabled');
let formData = {};
$.each($form.serializeArray(), function (index, fieldData) {
    if (fieldData.name.endsWith('[]')) {
        let name = fieldData.name.substring(0, fieldData.name.length - 2);
        if (!(name in formData)) {
            formData[name] = [];
        }
        formData[name].push(fieldData.value);
    } else {
        formData[fieldData.name] = fieldData.value;
    }
});
$disabled.attr('disabled', 'disabled');
console.log(formData);

它是Stanimir Stoyanov的变体,可以序列化禁用的字段。