2013-12-09 78 views
0

假設在html頁面中使用id爲「serialform」的表單。jquery this.attr(「action」)提交表單?

以下JavaScript按預期工作。

$("#serialform").submit(function(event) { 
    var action = $("#serialform").attr("action"); 
    var serial = $("#serial").val() 
    ... 
    return event.preventDefault(); 
}); 

但是,如果我取代函數的第一行用「這個」:

$("#serialform").submit(function(event) { 
    var action = this.attr("action"); 
    var serial = $("#serial").val() 
    ... 
    return event.preventDefault(); 
}); 

然後表單提交,而不是簡單地返回操作屬性。 this引用表單元素(根據螢火蟲)。

我原以爲this將相當於$("#serialform")。無論如何,我想獲取正在提交的表單的action屬性。

我正在使用jQuery 2.0.3。

+1

將'this.attr'替換爲'$(this).attr' – MackieeE

+0

嘗試將'this'更改爲'$(this)'。 – j08691

+0

因爲你得到錯誤「TypeError:undefined不是函數」或類似的東西。 [瞭解如何**調試** JavaScript](http://www.creativebloq.com/javascript/javascript-debugging-beginners-3122820)。請閱讀jQuery教程(http://learn.jquery.com/events/event-basics/)。它解釋了事件處理程序內部發生了什麼,以及「this」引用的內容。 –

回答

5

this是對DOM節點的引用,而不是被包裝的jQuery節點,這個DOM節點沒有實現.attr方法,所以會拋出錯誤

在調用jQuery方法之前,您需要將DOM節點包裝到jQuery對象中,如下所示:$(this).attr('action')

3

它提交因爲this.attr引發錯誤(如「對象不管有沒有方法‘ATTR’的東西),然後再代碼不能運行,而不是防止默認行爲。請檢查您的控制檯。

裏面一個jQuery的事件處理程序,this是觸發事件(形式,在這種情況下)的DOM元素。這不是一個jQuery對象,所以它不具有attr方法。