2010-11-01 17 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事件中你動態添加表格情況。