jQuery通过函数调用检查输入是否有值

时间:2016-09-23 08:17:48

标签: javascript jquery

我定义了这个函数来检查输入字段是否为空

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 );
}); 

感谢任何帮助。

4 个答案:

答案 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))

可能会解决您的问题。

谢谢&问候, 查理