2016-09-23 31 views
1

我定义这个功能用来检查是否一个输入字段为空或不jQuery的检查,如果输入具有通过函数调用值

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

任何帮助表示赞赏。

回答

1

Juste通过此申请。如果你想有一个更好的使用你的函数必须接受一个元素作为参数,它不是使用this这样的良好格局

hasValue.apply(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); 
}); 
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); 
}); 
+0

这是一样的OP提供的代码! –

1

你为什么在hasValue的方法,使用双重否定?

其次,作为适用:

var empty = hasValue.apply(this); 

这将通过元素作为您可以使用那里的参数!

第三,检查值是否存在,你可以只使用类型检查,而不是装饰为:

if(typeof $(this).val !== 'undefined'){ 
return true; 
} 

看看是否能为你的作品!

0

fn.apply语法应该像hasValue.apply($(本)),而不是hasValue的()。适用($(本))

可能会解决您的问题。

感谢&问候, 查理

相关问题