2010-11-01 61 views
1

我有一个页面上的几种形式,它们都是一样的,但有不同的隐藏价值:几个jQuery的形成

<?php foreach ($results as $result): ?> 

<form method="POST" action="edit.php"> 

<input type="hidden" name="id" value="<?php echo $result['id']; ?>"> 

<input type="submit" name="action" value="Edit"> 

</form> 

<?php endforeach; ?> 

我想使用.post的$此单击编辑时提交的ID .php,但是如果我使用$(“#id”)。val()(我试图发布隐藏的输入命名为id),它只会选择页面中的第一个id值,而不是那个被提交按钮点击。

$.post("edit.php", { id: $("#id").val(), action: "Edit" }, 
function(data){ 
alert("Data Loaded: " + data); //im using fancybox here to display an inline frame 
}); 

如何提交点击的当前表单的ID?

+0

首先你使用id选择器'#',但是你的元素没有id ..你已经将它们命名为'id',但是没有id属性存在(*它应该是唯一的,无论如何*) – 2010-11-01 23:13:17

回答

1

我假设你绑定到表单上的submit事件。使用serialize代替查询值:

$('form').submit(function(){ 

    $.post('edit.php', $(this).serialize(), function(data) { 
     alert("Data Loaded: " + data); 
    }); 

    return false; 
}); 
+0

请注意,这将**不包括像在正常的'

'提交中的'action = Edit'对。 – 2010-11-01 23:47:10

+0

@Nick Craver - 正确。这可以通过添加隐藏字段来处理:'' – rojoca 2010-11-02 00:00:56

+0

或'.serializeArray()':) – 2010-11-02 00:01:25

0

您是否有多个具有相同ID的页面元素?使用$(“#id”)。val()我相信只会检索具有该ID的元素的第一个值。多于一个会导致一系列元素。为了找到被复制,你将不得不把它的来龙去脉像一个特定的元素:

$("#myform").find("#id").val() 
1

既然你仍然需要包括提交的名称/值对,内<form>你在找到name="id"输入,像这样:

$.post("edit.php", { id: $(this).find("input[name=id]").val(), action: "Edit" }, 
function(data){ 
    alert("Data Loaded: " + data); 
}); 

id属性应该是在文档中唯一的,因为你的问题的标记没有它看起来像你固定的问题的ID。这发现name="id"<input><form>你在提交处理程序中。

0

使用在你选择提交作为上下文的表单元素:

$('form').live('submit', function(e) { 

    var form = $(this); 
    var id = $('#id', form).val(); 

    //... do your post here 
}); 

注:我用.live()绑定到submit事件中你动态添加表格情况。