2017-02-23 43 views
0

這是這個問題的一個副本:如何使用jquery 1.8獲取輸入的父窗體?

...但時間繼續前行。我認爲接受的答案不再有效。

我想提交複選框的形式,如果複選框已更改。

$(document).on("change", "#my_checkbox_input", function() { 
    $(this).??? 
}); 

???應該看起來像jquery版本> = 1.8?

+0

你可以顯示你的HTML,以便我們知道你到底想要做什麼 –

+0

@Anant我想盡量簡化問題。我不認爲這裏需要HTML。如果您的評論獲得了更多兩個upvotes,那麼我錯了,我會提供html。 – guettli

+3

如果你需要抓取'

'這個元素作爲你的複選框的容器,那麼我相信$(this).closest('form')'應該可以工作。爲什麼你覺得它不適用於jquery版本> = 1.8? – vijayP

回答

1

您可以使用this關鍵字,在事件上下文的當前變化的單元的對象是指,那麼就使用this.form獲取父形式,其中當前元素包裹,然後調用submit()方法,如果您要提交像這樣的:

$(document).on("change", "#my_checkbox_input", function() { 
    this.form.submit(); 
}); 

或者也可以通過形式轉換爲jQuery對象第一:

$(document).on("change", "#my_checkbox_input", function() { 
    $(this.form).submit(); 
}); 

而且你總是可以使用jQuery方法.parents().closest()獲取父元素,在這種情況下使用jQuery對象$(this)引用當前元素然後指定父節點名稱(form),如:

$(document).on("change", "#my_checkbox_input", function() { 
    $(this).parents('form').submit(); 
}); 

注:.closest()是更有效的在速度方面比.parents()

希望這會有所幫助。

+0

圖像你教一個新來的JS。你會建議他使用什麼(如「如果不確定......」)?你爲什麼會這樣建議? – guettli

+0

我已經添加了一個簡短的解釋...請看看。 –

+1

@ZakariaArcharki感謝您添加解釋。我將來會使用'$(this.form).submit();'。 – guettli

0

嘗試:

$(this).parent() 

或者:

$(this).parent().find('#parent_id') 
3

您可以使用closest()尋父form元素,然後調用submit()它:

$(document).on("change", "#my_checkbox_input", function() { 
    $(this).closest('form').submit(); 
}); 

還要注意的是closest()從jQuery 1.3開始就已經可用了,所以ver錫安在這種情況下幾乎沒有什麼區別。

0

下面的代碼可以在這種情況下工作,但請注意其他人已經用上述相同的語法來回答。

$(document).on("change", "#my_checkbox_input", function() { 
    var form = $(this).closest('form'); 
    // do whatever you want with the form as `form` 
}); 

.closest()方法通過搜索DOM樹中的元素和他們的祖先,並返回最近的一個匹配的傳遞查詢。在這種情況下,我們正在尋找一個表單,所以它會返回你正在尋找的表單。