2012-12-05 87 views
0

我一直在摔跤這個問題幾個小時了。jquery從表單數據創建數組

從本質上講,我需要做的就是採取以下或類似HTML:

<div id="excpdivs"> 
<div class="excpdiv" id="excpdiv0"> 
     Date: <input name="excp[0][date]"> 
     Open: <input name="excp[0][open]"> 
     Close: <input name="excp[0][close]"> 
</div> 
<div class="excpdiv" id="expdiv1"> 
     Date: <input name="excp[1][date]"> 
     Open: <input name="excp[1][open]"> 
     Close: <input name="excp[1][close]"> 
</div> 

,並得到類似通過AJAX以下PHP腳本的數組:

Array 
(
    [0] => Array 
     (
      [date] => 2012-09-15 
      [open] => 3:00 
      [close] => 5:00 
     ) 
    [1] => Array 
     (
      [date] => 2012-09-16 
      [open] => 2:00 
      [close] => 5:00 
     ) 

) 

我的主要問題是從輸入元素中獲取值。我的最新嘗試如下:

var results = []; 
$(".excpdiv").each(function(){ 
    var item = {}; 
    var inpts = $(this).find("input"); 
    item.date = $(inpts.get(0)).val(); 
    item.open = $(inpts.get(1)).val(); 
    item.close = $(inpts.get(2)).val(); 
    results.push(item); 
}); 

我在正確的軌道上,或我徹底失敗了?

+1

標準形式提交,或阿賈克斯? (與你的問題無關,你可以說'inpts.eq(0).val()'而不是'$(inpts.get(0)).val()' - 你不必自己創建另一個jQuery對象。 – nnnnnn

+0

你的問題是什麼?代碼可以改進,但可以。 – Christophe

+0

nnnnnn,用Ajax代替標準表格提交 – AndrewStevens

回答

0

我認爲你應該做這個,而不是

var results = []; 
$(".excpdiv").each(function(){ 
    var item = {}; 
    var inpts = $(this).find("input"); 
    item.date = $(inpts)[0].val(); 
    item.open = $(inpts)[1].val(); 
    item.close = $(inpts)[2].val(); 
    results.push(item); 
}); 

希望它可以幫助...

+0

感謝您的及時迴應。 但是,我得到以下錯誤與您的代碼: 未捕獲的TypeError:對象#沒有方法'val' – AndrewStevens

+0

大聲笑我剛纔嘗試了你自己的代碼,它似乎工作到底你想要什麼?? –

+0

爲什麼在使用'[0]'之後調用'.val()'?當你使用'[0]',你得到的DOM元素,它沒有jQuery方法... – Ian

0

你不需要爲這個jQuery,你有HTML標記將提供PHP中的數組。將輸入內容以一種形式發佈到php腳本來處理邏輯。然後你可以訪問你的信息:

$_POST['excp'][0]['date'] 
+0

我應該指定,我想通過ajax發送這個,而不是直接提交表格到php – AndrewStevens

+0

哪裏你是否指定了它,甚至沒有標籤。無論如何,請使用$ .post發送帖子請求.http://api.jquery.com/jQuery.post/ –

0

也許是一個簡單的序列化。

來源:api.jquery.com/jQuery.post/

Example: Send form data using ajax requests 


$.post("test.php", $("#testform").serialize());