当我在console.log form
变量时,它始终设置为window
,即使它位于包含3个表单的.ajax-form
类选择器中。我怎样才能使$(this)
成为形式?这是代码:
$(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 :(得分:2)
这是因为箭头函数没有自己的这个上下文,只有执行上下文,即本例中的窗口对象。
您可以将元素传递给函数:
$('.ajax-form').each((_i, elem) => {
const form = $(elem);
})
或函数关键字:
$('.ajax-form').each(function(){
const form = $(this);
})