jQuery $(this) внутренняя функция
Я хочу передать $(this) в функцию, но я не уверен. Есть одна похожая нить, но я до сих пор не могу заставить ее работать. Надеюсь, кто-нибудь мне поможет.
$(document).ready(function() {
var delay = (function(){
var timer = 0;
return function(callback, ms){
clearTimeout (timer);
timer = setTimeout(callback, ms);
};
})();
$('input').keyup(function() {
delay(function(){
alert($(this).val());
}, 1000 );
});
});
4 ответа:
Вы должны сохранить ссылку на это:
$('input').keyup(function() { var $this = $(this); delay(function(){ alert($this.val()); }, 1000 ); });
Другим вариантом является повторная привязка
this
к функции:$('input').keyup(function() { delay(function(){ alert($(this).val()); }.bind(this), 1000 ); });
Вам нужно будет привести контекст:
return function(callback, ms, context){ clearTimeout (timer); timer = setTimeout(function() { callback.call(context); }, ms); };
А затем
delay(function() { alert($(this).val()); }, 1000, this );
Но, как и другие, вы действительно хотите сохранить контекст в локальной переменной. Вот еще один способ сделать это:
$('input').keyup(function() { delay((function(self) { return function() { alert($(self).val()); }; }(this)), 1000); });
Держите ссылку на
$(this)
вне функции.// ... $('input').keyup(function() { var $this = $(this); delay(function() { alert( $this.val() ); }, 1000) });
Это изменилось из-за изменения области действия функции. Вам нужно сохранить значение, используя закрытие.
Если все, что вы передаете, - это значение, вам не нужно $(this)
$('input').keyup(function() { var val = this.value; delay(function(){ alert(val); }, 1000 ); });
Другой способ был бы
$('input').keyup(function() { delay((function(val){ return function() { alert(val); }; }(this.value)), 1000 ); });