Как сериализовать несколько значений флажков с помощью jQuery? - PullRequest
2 голосов
/ 28 ноября 2011

Я изменил простой пример 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 ]

4 голосов
/ 24 октября 2013

Простой сборщик значений :) 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));
4 голосов
/ 28 ноября 2011

Вы можете использовать .serializeArray () Ref: http://api.jquery.com/serializeArray/

2 голосов
/ 31 января 2016

В html-коде измените name="tick" в name="tick[]", и вы можете просто использовать $(this).serialize(); для публикации всех проверенных значений.

0 голосов
/ 13 апреля 2018
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);

Вариант ответа Станимира Стоянова с возможностью сериализации отключенных полей.

0 голосов
/ 18 мая 2017

Вы все еще можете использовать .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');

postData будет содержать все элементы формы, кроме отключенных. Все значения флажков будут переданы в виде массива, как при обычной отправке формы.

0 голосов
/ 06 марта 2015
term = $("#input[name^=tick]:checked").map(function () {
    return this.value;
}).get();
term.join();
...