2017-06-14 49 views
0

當我console.log form變量,它始終設置爲window即使它在.ajax-form類選擇器,其中包含3種形式。我如何使$(this)成爲表格?這裏是代碼:jquery無法將其設置爲當前元素

$(document).ready(() => { 
    // reloading comment 
    $('.ajax-form').each(() => { 
    const form = $(this); 
    form.submit((event) => { 
     event.preventDefault(); 
     console.log(form); 
     $.ajax({ 
     type: form.attr('method'), 
     dataType: 'JSON', 
     url: form.attr('action'), 
     data: form.serialize(), 
     }).done((data) => { 
     console.log(data); 
      // location.reload(); 
     }).fail((data) => { 
     const errors = data; 
     console.log(errors); 
     Object.entries(errors).forEach((error) => { 
      const label = form.find(`label[for='${error}']`); 
      label.text(error[1][0]); 
     }); 
     }); 
    }); 
    }); 
}); 
+0

你可以分享一些HTML解釋大致形式怎麼看'阿賈克斯,form'類元素內 – caramba

+0

@caramba這與我的問題有什麼關係? –

+0

我會嘗試運行你的代碼,這取決於HTML,那麼也許我可以解釋什麼,爲什麼,在哪裏。在我看來,HTML更重要的是重現你的問題,然後ajax請求部分 – caramba

回答

2

這是因爲箭頭函數沒有它自己的這方面,但只執行上下文,即窗口對象在這個例子。

您可以將元素的功能:

$('.ajax-form').each((_i, elem) => { 
    const form = $(elem); 
}) 

或function關鍵字:

$('.ajax-form').each(function(){ 
    const form = $(this); 
}) 
+0

有趣。我只是意識到它可能與es6語法有關。你介意告訴我你的意思是「沒有自己的這種背景,而只有執行背景」? @Jeremy Fan –

+0

@MarshallX也許[這個文檔](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions#No_binding_of_this)可能有幫助。 (抱歉我的英語) –

相關問題