我定义了此功能,该功能检查输入字段是否为空

function hasValue() {
    if ( !!$.trim( $(this).val() ) )
        return true;
}


它只适合过滤jQuery集合

$('#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 );
});


任何帮助表示赞赏。

最佳答案

Juste通过此申请。而且不要在之前执行():

hasValue.apply(this);


如果要更好地使用函数,则必须接受一个元素作为参数,这样使用this并不是一个好的模式。首选在参数中传递元素

function hasValue(elem) {
    return !!$.trim($(elem).val());
}


然后map的用法是相同的:

$('#form').find( '.email' ).filter( hasValue );


和:

$('.input').change( function () {
    var empty = hasValue(elem); //throws an error
    $('#box').find('.required-tmp').toggleClass('required', empty );
});

09-17 22:39