我定义了这个函数来检查输入字段是否为空
function hasValue() {
if ( !!$.trim( $(this).val() ) )
return true;
}
它可以很好地过滤jQuery Collection
$('#form').find( '.email' ).filter( hasValue );
但我也想重用hasValue()
- 函数来编写一个类。
$('.input').change( function () {
var empty = hasValue().apply( $(this) ); //throws an error
// var empty = $(this).hasValue(); //doesn't work either
$('#box').find('.required-tmp').toggleClass('required', empty );
});
感谢任何帮助。
答案 0 :(得分:1)
$('.input').change( function () {
var empty = hasValue.apply( $(this) ); //apply function should be used this way .
// var empty = $(this).hasValue(); //doesn't work either
$('#box').find('.required-tmp').toggleClass('required', empty );
});
答案 1 :(得分:1)
Juste通过此申请。并且之前不要执行():
hasValue.apply(this);
如果你想更好地使用你的函数,它必须接受一个元素作为参数,这不是一个好的模式,可以像这样使用this
。更喜欢在参数
function hasValue(elem) {
return !!$.trim($(elem).val());
}
然后地图的用法相同:
$('#form').find( '.email' ).filter( hasValue );
并且:
$('.input').change( function () {
var empty = hasValue(elem); //throws an error
$('#box').find('.required-tmp').toggleClass('required', empty );
});
答案 2 :(得分:1)
为什么在hasValue方法中使用双重否定?
其次,使用apply as:
var empty = hasValue.apply( this );
这会将元素作为参数传递给你!
第三,为了检查值是否存在,您可以使用类型检查而不是修剪为:
if(typeof $(this).val !== 'undefined'){
return true;
}
看看它是否适合你!
答案 3 :(得分:0)
fn.apply语法应该类似于hasValue.apply($(this))而不是hasValue()。apply($(this))
可能会解决您的问题。
谢谢&问候, 查理