如果我有一个带有'textInputs'类的输入并且对这些元素有一个粘贴函数,我需要在粘贴事件函数中嵌套一个setTimeout函数,但是如何在超时函数中定义this
?下面的代码不起作用,因为未在setTimeout函数内定义this
。谢谢。
$('.textInputs').on('paste',function() {
var element = this;
window.setTimeout(function() {
newstr = element.value.replace(/\n/g, '');
$(this).val(newstr);
},100);
});
答案 0 :(得分:5)
刚刚使用了缓存的一个,setTimeout回调中的this
指向全局上下文而不是元素。
$('.textInputs').on('paste',function() {
var element = this;
window.setTimeout(function() {
newstr = element.value.replace(/\n/g, '');
$(element).val(newstr); //<-- Here
//or just
//element.value = element.value.replace(/\n/g, '');
},100);
});
您可以使用.val( function(index, value) )语法简化此操作:
$('.textInputs').on('paste',function() {
var $element = $(this);
window.setTimeout(function() {
$element.val(function(_, currVal){
return currVal.replace(/\n/g, '');
});
},100);
});
答案 1 :(得分:2)
也许你的意思是这个?
$('.textInputs').on('paste',function() {
var element = this;
window.setTimeout(function() {
newstr = element.value.replace(/\n/g, '');
$(element ).val(newstr);
},100);
});
答案 2 :(得分:1)
您引用的是this
而不是您的元素。
var element = $(this);
window.setTimeout(function() {
newstr = element.value.replace(/\n/g, '');
element.val(newstr);
},100);