2009-01-06 91 views
43

我想要觸發表格當前元素是在提交事件中,我知道作品的方法,有時是:有沒有更好的jQuery解決方案this.form.submit();?

this.form.submit(); 

我不知道是否有更好的解決方案,可能使用jQuery,因爲我不是100%確定的方法在每個瀏覽器中都有效。

編輯:

我的情況是,如下所示:

<form method="get"> 
    <p><label>Field Label 
     <select onchange="this.form.submit();"> 
      <option value="blah">Blah</option> 
      .... 
     </select></label> 
    </p> 
</form> 

我希望能夠提交一份關於<select>的變化形式。

我在找的是一種解決方案,可以在任何表單中的任何字段上工作,而無需知道表單上的ID或名稱。 $('form:first')$('form')將不起作用,因爲表單可能是頁面上的第三個。此外,我已經在網站上使用jQuery,所以使用一點jQuery並不是什麼大不了的事情。

那麼,有沒有辦法讓jQuery檢索input/select/textarea所在的表單?

+0

您發佈的方法一直對我有用。 – 2009-01-06 20:54:58

+0

是的,爲什麼不會this.form.submit()工作? – marcovtwout 2013-08-07 13:54:17

回答

101

我想你在找什麼是這樣的:

$(field).closest("form").submit(); 

例如,要處理onchange事件,你有這樣的:

$(select your fields here).change(function() { 
    $(this).closest("form").submit(); 
}); 

如果由於某種原因,你沒有使用jQuery 1.3或更高版本,您可以撥打parents而不是closest

0

在jQuery中可以調用

$("form:first").trigger("submit") 

不知道,如果這是好多了。我認爲form.submit();非常普遍。

3

您可以隨時JQuery-ize您form.submit,但它可能只是調用同樣的事情:

$("form").submit(); // probably able to affect multiple forms (good or bad) 

// or you can address it by ID 
$("#yourFormId").submit(); 

您還可以attach職能提交事件,但是這是一個不同的概念。

+0

問題說他不想這樣做 – Amala 2012-03-12 20:13:14

+1

它現在確實如此。這是在我提交答案後第二天發生的編輯。 – patridge 2012-03-23 14:55:57

24
this.form.submit(); 

這可能是你最好的選擇。特別是如果你還沒有在你的項目中使用jQuery,那麼就不需要爲了這個目的而添加它(或任何其他的JS庫)。

1

你的問題在某種程度上令人困惑,因爲你不解釋「當前元素」是什麼意思。

如果您在具有各種輸入元素和類型爲「submit」的按鈕的頁面上有多個表單,則在填寫其任何字段時點擊「enter」將觸發提交該表單。那裏你不需要任何Javascript。

但是,如果您在表單上沒有多個「提交」按鈕並且沒有其他輸入(例如,表格中的「編輯行」和/或「刪除行」按鈕),那麼您發佈的行可能是執行此操作的方式。

另一種方法(不需要Javascript)可以爲所有按鈕(類型爲「submit」)提供不同的值。就像這樣:

<form action="..."> 
    <input type="hidden" name="rowId" value="..."> 
    <button type="submit" name="myaction" value="edit">Edit</button> 
    <button type="submit" name="myaction" value="delete">Delete</button> 
</form> 

當你點擊一個按鈕只包含按鈕將被提交表單,按鈕才值你打將被髮送(以及其他的輸入值)。

然後在服務器上,您只需讀取變量「myaction」的值並決定要執行的操作。

3

Matthew's答案類似,我才發現,你可以做到以下幾點:

$(this).closest('form').submit(); 

錯誤:使用父功能的問題是,該領域需要立即表單內工作(不內部tds,標籤等)。

我糾正:家長s(與s)也可以。 Thxs Paolo指出了這一點。

0
<form method="get"> 
    <p><label>Field Label 
     <select onchange="this.form.submit();"> 
     <option value="blah">Blah</option> 
      .... 
    </select> 
    </label> 
    </p> 
    **<!-- <input name="submit" type="submit" /> // name="submit_new_name" -->** 
    </form> 

<!-- 

    this.form.submit == this.form.elements['submit']; 

--> 
2

我發現,使用jQuery最好的解決辦法是

$(this.form).submit() 

使用此聲明的jQuery插件(例如​​)正常工作和jQuery DOM遍歷開銷最小化。

相關問題