Javascript 函数在使用setTimeOut-jQuery后不显示父类

Javascript 函数在使用setTimeOut-jQuery后不显示父类,javascript,jquery,Javascript,Jquery,在显示父元素类的函数中使用setTimeout后,console.log中的结果未定义 在用户触发输入中的模糊后,如何检查类 jQuery('body')。on('blur',')。字段包装器输入。字段项',函数(){ setTimeout(函数(){ console.log($(this).closest('.field wrapper').attr('class')); }, 1200); }) 我知道这是一个很容易解决的问题,但您需要定义一个新变量var=this。这是因为var此在新

在显示父元素类的函数中使用setTimeout后,
console.log
中的结果未定义

在用户触发输入中的模糊后,如何检查类


jQuery('body')。on('blur',')。字段包装器输入。字段项',函数(){
setTimeout(函数(){
console.log($(this).closest('.field wrapper').attr('class'));
}, 1200);
})

我知道这是一个很容易解决的问题,但您需要定义一个新变量
var=this
。这是因为var
在新的setTimeout函数中已更改

这就是我所做的

jQuery('body').on('blur', '.field-wrapper input.field-item', function() {
  var that = this;
  setTimeout(function() {
    console.log($(that).closest('.field-wrapper').attr('class'));
    alert($(that).closest('.field-wrapper').attr('class'));
  }, 1200);
 })

我知道这是一个简单的解决方案,但您需要定义一个新变量
var=this
。这是因为var
在新的setTimeout函数中已更改

这就是我所做的

jQuery('body').on('blur', '.field-wrapper input.field-item', function() {
  var that = this;
  setTimeout(function() {
    console.log($(that).closest('.field-wrapper').attr('class'));
    alert($(that).closest('.field-wrapper').attr('class'));
  }, 1200);
 })

这是因为
This
的上下文在方法
setTimeout
的回调内部发生变化,您在这里需要做的是存储
$(This)
如下:

var myElement = $(this);

// then do the setTimeout and inside use `myElement` instead of `$(this)`
setTimeout(function(){    
  console.log(myElement.closest('.field-wrapper').attr('class'));
}, 1200);

这是因为
This
的上下文在方法
setTimeout
的回调内部发生变化,您在这里需要做的是存储
$(This)
如下:

var myElement = $(this);

// then do the setTimeout and inside use `myElement` instead of `$(this)`
setTimeout(function(){    
  console.log(myElement.closest('.field-wrapper').attr('class'));
}, 1200);

如果函数丢失了
指针,可以使用不绑定到

jQuery('body').on('blur', '.field-wrapper input.field-item', function () {
    setTimeout(() => {
        console.log($(this).closest('.field-wrapper').attr('class'));
    }, 1200);
})

如果函数丢失了
指针,可以使用不绑定到

jQuery('body').on('blur', '.field-wrapper input.field-item', function () {
    setTimeout(() => {
        console.log($(this).closest('.field-wrapper').attr('class'));
    }, 1200);
})

您需要使用
设置超时

jQuery('body').on('blur',').field wrapper input.field item',function(){
setTimeout(函数(){
console.log($(this).closest('.field wrapper').attr('class'));
}.bind(this),1200);
})

您需要使用
设置超时

jQuery('body').on('blur',').field wrapper input.field item',function(){
setTimeout(函数(){
console.log($(this).closest('.field wrapper').attr('class'));
}.bind(this),1200);
})


值得注意的是,任何IE版本都不支持箭头功能,需要像Babel这样的transpiler来提供完整的跨浏览器功能support@MatthewBrent我真的认为互联网应该继续发展,如果2018年有人仍然使用
IE
,那么无论如何60%的网站都不会为他服务。每当我在开发一个网站时,我都会100%忽略IE,而支持IE则会多花30%的开发时间,对于2-4%的潜在用户来说…@DanielKrom我真的很同意这种观点,我个人也这么认为,但是,需要注意的是,某些公司环境不允许这种设计。我也同意这一点,在没有IE浏览器的情况下,浏览器兼容性非常重要(即使是微软仍然支持的IE11)这对许多组织来说可能非常重要,而且它也只是稍微补充了一点答案。提到浏览器没有坏处support@MatthewBrent我完全同意提及这一点很重要。值得注意的是,任何IE版本都不支持箭头功能,需要像Babel这样的transpiler来提供完整的跨浏览器功能support@MatthewBrent我真的认为互联网应该继续发展,如果2018年仍有人使用
IE
,那么无论如何60%的网站都不会为他服务。每当我在开发一个网站时,我都会100%忽略IE,而支持IE则会多花30%的开发时间,对于2-4%的潜在用户来说…@DanielKrom我真的很同意这种观点,我个人也这么认为,但是,需要注意的是,某些公司环境不允许这种设计。我也同意这一点,在没有IE浏览器的情况下,浏览器兼容性非常重要(即使是微软仍然支持的IE11)这对许多组织来说可能非常重要,而且它也只是稍微补充了一点答案。提到浏览器没有坏处support@MatthewBrent我完全同意提及它很重要,可能是一个输入错误,但在您的箭头函数示例中,
setTimeout
似乎已改为
setInterval
。@Script47是的,这是一个输入错误。感谢您指出它。我已经说过可能是一个输入错误,但
setTimeout
在您的箭头函数示例中似乎已改为
setInterval
。@Script47是的,这是一个打字错误。谢谢您指出它。我已经解释过了