2011-12-01 18 views
0

功能之間的「返回false」我知道標題是一個糟糕的標題,我不知道有什麼辦法比用一個例子來解釋這個其他:傳遞的jQuery

$('form').submit(function(){ 
    $(this).find('input').each(function(){ 
    if($(this).hasClass('error')) 
     return false; 
    }); 
}); 

然而,「返回false 「正在返回錯誤的」.each()「。我怎樣才能將它「傳遞」到「.submit()」?

回答

5

如果您正在尋找這種形式具有類錯誤的任何輸入,你可以這樣做:

return $(this).find('input.error').length == 0; 
+0

呃,你的版本比較容易邏輯處理,我的反轉,如果有一個類返回true,所以你必須將它反轉爲他所期望的返回false。 +1爲更直接的方法。 = P –

+0

@MatthewCox - 如果不是用於反演,使用'hasClass'會更清晰。如果jQuery使用布爾方法檢查是否有任何元素與選擇器匹配,那麼這將是最乾淨的,就像檢查長度的快捷方式。 '$(本).ANY( 'input.error')'。 – Anurag

1

由於.each()方法調用回調函數,因此不能從.each()回調中提交。所以,你必須爲你的返回值設置一個變量,然後再返回。

$('form').submit(function(){ 
    if ($(this).find('input.error').length != 0) { 
     return(false); 
    } 
}); 

或稍微更簡潔:

$('form').submit(function(){ 
    var retVal = true; 
    $(this).find('input').each(function(){ 
    if($(this).hasClass('error')) 
     retVal = false; 
     return false; 
    }); 
    return(retVal); 
}); 

您也可以通過讓選擇器引擎做你的搜索,而不是.each()這樣的迭代自己解決這個問題

$('form').submit(function(){ 
     return($(this).find('input.error').length == 0); 
}); 
0

在循環外聲明一個變量,並在退出循環之前設置,然後返回變量的值:

$('form').submit(function(){ 
    var result = true; 
    $(this).find('input').each(function(){ 
    if($(this).hasClass('error')) 
     result = false; 
     return false; // exit loop 
    }); 
    return result; 
}); 
2

只是簡化它。看來,如果你發現這個類,你想返回false,這可以像這樣做的一個實例:

$('form').submit(function() 
{ 
    return $(this).find('input').hasClass('error') == false; 
}); 

你也可以使用NOT運算符但這只是看起來醜陋選擇IMO。

0
$('form').submit(function(){ 
    var allok = true; 
    $(this).find('input').each(function(){ 
    if($(this).hasClass('error')) 
     allok =false; 
    }); 
    return allok; 
});