2011-11-28 33 views
2

我修改的jQuery.post簡單的例子作爲如何通過jQuery序列化多個複選框值?

$("#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

注:我不想序列化整個窗體,但只有選中的複選框輸入值。

回答

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)); 
0
term = $("#input[name^=tick]:checked").map(function() { 
    return this.value; 
}).get(); 
term.join(); 
1

在html代碼更改name="tick"name="tick[]"中,您可以使用簡單$(this).serialize();發佈所有選中的值。

0

,您仍然可以使用.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將包含除殘疾人之外的所有表單元素。所有複選框的值將以數組的形式傳遞,就像在進行正常的表單提交時一樣。