我正在寻找一种在函数内部正确调用this
的方法,现在我有快速入侵var that = $(this);
,但我确信有适当的方法可以做到这一点。我怎么能避免这种黑客攻击?
这是输入字段,用于获取var并检查Typing Interval
<input type="text" data-package="pink" class="js-p-input">
这是我的代码:
var cCalc = (function ($) {
var s;
return {
settings: {
typingTimer: "",
doneTypingInterval: 300,
$inputs: $(".js-p-input"),
},
init: function () {
s = this.settings;
this.bindUIActions();
},
bindUIActions: function () {
//on keyup, start the countdown
s.$inputs.on('keyup', function () {
var that = $(this);
clearTimeout(s.typingTimer);
s.typingTimer = setTimeout(function() {
cCalc.doneTyping(that, that.data("package"));
}, s.doneTypingInterval);
});
s.$inputs.on('keydown', function () {
clearTimeout(s.typingTimer);
});
},
doneTyping: function ($input, packageName) {
console.log('done!');
cCalc.getValues($input.val(), packageName);
},
};
})(jQuery);
cCalc.init();
答案 0 :(得分:0)
使用“黑客”没有任何问题,这是标准的操作程序。另请参阅此处What is the difference between call and apply?了解更多“hacky”内容,其中“this”是标准内容。
答案 1 :(得分:0)
正如其他人所指出的那样,使用闭包并没有什么不妥,但你可以选择绑定&#34;这个&#34;进入超时功能范围如下:
s.$inputs.on('keyup', function () {
clearTimeout(s.typingTimer);
s.typingTimer = setTimeout(function() {
cCalc.doneTyping($(this), $(this).data("package"));
}.bind(this), s.doneTypingInterval);
});