2011-12-21 110 views
2

我想提交一個窗體與jQuery的$ .ajax()函數,它的工作原理,除了它只發送最後幾個複選框的值,不管我檢查多少。如果有人能告訴我我做錯了什麼,我會很感激。提前致謝!jQuery Ajax窗體只發送最後幾個複選框值

HTML表單:

<form name="contactFormSmall" id="contactFormSmall" action="" method="post"> 
    <input type="text" name="textfieldname" value="textfieldvalue" /> 
    <input type="checkbox" name="checkboxes" value="Testvalue One" checked="checked" /> 
    <input type="checkbox" name="checkboxes" value="Testvalue Two" checked="checked" /> 
    <input type="checkbox" name="checkboxes" value="Testvalue Three" checked="checked" /> 
</form> 

這裏的jQuery的處理形式:

var fields = $(":input").serializeArray(); 

$.ajax({ 
    type: "POST", 
    contentType: "application/x-www-form-urlencoded;charset=ISO-8859-15", 
    url: "includes/contact_process_small.php", 
    data: fields, 
    success: function(data) { 
     $('#contactFormSmall').hide(); 
     $("#formFeedback").html(data).show(); 
    } 

}); 

,這裏是從print_r的在PHP腳本的結果($ _ POST):

Array 
(
    [textfieldname] => textfieldvalue 
    [checkboxes] => Testvalue Three 
) 

回答

6

name="checkboxes"是正確的只有一個單一的元素,你必須使用name="checkboxes[]"

+0

謝謝!我知道你必須用PHP來做到這一點,但我想我認爲jQuery會以某種方式處理它。 – Skumberg 2011-12-22 14:55:12

+0

這就是HTML的工作原理:每個名稱都作爲變量在POST請求中發送,並且如果多個輸入元素具有相同的名稱,它將被覆蓋。 – Viruzzo 2011-12-22 15:42:47

0

更好的方式連載形式
這樣
數據:$( '#contactFormSmall')序列化(),
並更改名稱=「複選框[]

0

試試這個:

$('form#contactFormSmall').serializeArray(); 
+0

@Skumberg您需要更改複選框的名稱。 – thecodeparadox 2011-12-21 13:51:04

0

name屬性是在密鑰值對中的POST數據的關鍵因此,使用任一名稱=「複選框[]」來創建陣列或使用:

<form name="contactFormSmall" id="contactFormSmall" action="" method="post"> 
    <input type="text" name="textfieldname" value="textfieldvalue" /> 
    <input type="checkbox" name="checkboxA" value="Testvalue One" checked="checked" /> 
    <input type="checkbox" name="checkboxB" value="Testvalue Two" checked="checked" /> 
    <input type="checkbox" name="checkboxC" value="Testvalue Three" checked="checked" /> 
</form> 

單獨獲取每個複選框的值(這更可能是你想要的)。