2012-12-05 88 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());