即使勾选了我在页面上的两个复选框,我似乎也无法使此函数返回true。我已经在这个工作了几个小时,现在已经没想完了。任何帮助将不胜感激。
if(myfunction() == true){
alert('YAY!');
}
function myfunction(){
if($("input[type=checkbox]").length > 0){
$('.checkbox').each(function(){
if($(this).prop('checked')){
return true;
}
else{
$(this).find(".CheckboxCheck").show();
return false;
}
});
}
else{
return true;
}
}
答案 0 :(得分:5)
您从传递给each
的函数中返回true,而不是从myfunction
返回true。除非您的网页上没有复选框,因此else
块在myfunction
中执行,myfunction
正在返回undefined
。
你可以这样做:
if(myfunction() == true){
alert('YAY!');
}
function myfunction(){
var returnValue = true;
if($("input[type=checkbox]").length > 0) {
$('.checkbox').each(function(){
if($(this).prop('checked')){
returnValue = true;
return false; // Stops the each loop.
}
else {
$(this).find(".CheckboxCheck").show();
returnValue = false;
return false; // Stops the each loop.
}
});
}
return returnValue;
}
现在,我并不完全确定你要做什么,而且你几乎肯定需要调整上面的代码。我只是提供它来说明如何从传递给each
的函数中获取值。例如,如果您要确定是否选中了所有复选框,那么您希望each
函数看起来像这样:
var returnValue = true;
...
$('.checkbox').each(function() {
if (!$(this).prop('checked')) {
returnValue = false;
return false;
}
});
编辑:再次查看第二个代码段后,我意识到each
循环是不必要的。如果您想确定是否选中了所有复选框,您只需要:
if ($('.checkbox:not(:checked)').length == 0) {
// All .checkbox elements are checked.
}
现在,请记住,:not()
和:checked
选择器无法使用本机JS函数,因此速度较慢,但可能不够重要。我更喜欢简洁。
答案 1 :(得分:2)
从each
回调函数内部返回将不会从外部函数返回。该函数将返回undefined
,因为您尚未为其指定任何返回值,并且该值不等于true
。
您可以在循环中设置结果的变量:
function myfunction(){
var result = true;
$('.checkbox').each(function(){
if(!$(this).prop('checked')){
result = false;
$(this).find(".CheckboxCheck").show();
return false; // exit the loop
}
});
return result;
}