我有一小段代码:
if (PZ_APP.dom.isAnyDomElement($textInputs)){
$textInputs.on("focus", function(){
var $this = $(this),
placeholder = $this.attr('data-placeholder') || "Wpisz tekst...";
if ($this.val() === placeholder){
$this.val("");
}
}).blur(function(){
var $this = $(this),
placeholder = $this.attr('data-placeholder');
if ($this.val() === ""){
$this.val(placeholder);
}
});
我可以在事件处理程序之间避免多个var $ this = $(this)赋值吗?
答案 0 :(得分:1)
鉴于$textInputs
似乎与多个元素匹配,并且您需要this
作为事件实际触发的元素:
没有。 this
只能在每个函数中获得正确的值。
答案 1 :(得分:1)
如果您想进行优化(仅计算一次),按照@ Quentin的答案,那么没有。但是如果你想为风格目的而做,你可以,但它不是更好......
function aopPreface(fn) {
return function() {
fn.call(this, $(this));
};
};
if (PZ_APP.dom.isAnyDomElement($textInputs)){
$textInputs.on("focus", aopPreface(function($this){
var placeholder = $this.attr('data-placeholder') || "Wpisz tekst...";
if ($this.val() === placeholder){
$this.val("");
}
})).blur(aopPreface(function($this){
var placeholder = $this.attr('data-placeholder');
if ($this.val() === ""){
$this.val(placeholder);
}
}));
}
我并不是在这种情况下提倡这一点,因为IMO并不是更清晰,更清晰或更快,但如果你最终在一组函数调用之前或之后做了很多相同的事情,那么模式就是一个非常有用的重构工具。 (在您的情况下,占位符变量也可以移动。