jquery无法将其设置为当前元素

时间:2017-06-14 05:43:09

标签: javascript jquery

当我在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]);
        });
      });
    });
  });
});

1 个答案:

答案 0 :(得分:2)

这是因为箭头函数没有自己的这个上下文,只有执行上下文,即本例中的窗口对象。

您可以将元素传递给函数:

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

或函数关键字:

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