我想知道这是否正确。
$('.myfilter').focus(function(){
var length = $(this).val().length;
if (length == 0) {
dosomething
}
}).blur(function(length){
if (length == 0) {
dowhatever
}
})
上面我简化了我的代码,我只是检查焦点上的length == 0
和输入的模糊。注意我如何声明length
聚焦,但不是模糊,但我在.blur(function(length){
内添加了变量名称。这是在length
中访问.blur
而无需在.blur中重新声明var length = $(this).val().length;
的更好方法吗?
与此相反:
$('.myfilter').focus(function(){
var length = $(this).val().length;
if (length == 0) {
dosomething
}
})
$('.myfilter').blur(function(length){
var length = $(this).val().length;
if (length == 0) {
dowhatever
}
})
第一个代码块是更好的方法吗?
答案 0 :(得分:4)
如何根本不声明任何变量...... :)
$('.myfilter').focus(function() {
if ( this.value.length === 0 ) {
dosomething();
}
}).blur(function(length) {
if ( this.value.length === 0 ) {
dowhatever();
}
});
另外,这个:
$('.myfilter').bind('focus blur', function(e) {
if ( this.value.length === 0 ) {
e.type === 'focus' ? dosomething() : dowhatever();
}
});
使用变量
如果您需要多次使用某个值,通常需要使用变量。但是,在这种情况下,您只需要this.value.length
值一次(在if-header中)。因此,您可以直接在if-header中注入此值。
$(this)vs this
为了了解何时使用哪个,您需要了解DOM元素对象和jQuery对象之间的区别。 jQuery对象是一个包装器对象,它包含零个或多个DOM元素对象(如数组)。重要的是要了解您只能在jQuery对象上调用jQuery方法(如.addClass()
),而不能直接调用DOM元素。
在事件处理函数内部,this
值引用事件触发的DOM元素。现在,如果要在该DOM元素上调用jQuery方法,则需要将该DOM元素包装在jQuery对象中 - 您可以通过编写$(this)
来完成此操作。
$(this).addClass('selected'); // works fine
this.addClass('selected'); // throws Error
答案 1 :(得分:2)
我通常会做的是,如果您不想重新获得length
,请将length
存储在this
的媒体资源中,然后在blur
中阅读事件,像这样:
$('.myfilter').focus(function(){
this.val_length = $(this).val().length;
if (this.val_length == 0) {
dosomething
}
}).blur(function(){
if (this.val_length == 0) {
dowhatever
}
})
答案 2 :(得分:0)
第一个代码块不起作用 - 传递给.blur()
的参数实际上是触发模糊调用的事件。
另请注意,不需要使用jQuery来获取值,它是this
的直接属性(对于输入元素):
$('.myfilter').blur(function(ev) {
if (this.value.length === 0) {
// dowhatever
}
});