2016-09-14 47 views
0

以下是我創建的表單的驗證。我在步驟2的提交中包含函數step_2_validation()。如果值不是數字,則返回false

如果輸入包含一個字符串,但函數正確顯示,但窗體不返回false;聲明。我在這裏錯過了什麼?

// Check mileage does not contain text 
var mileageInputs = $('.form__item.labelled input[type="text"]') 
var mileageArray = $.map(mileageInputs, function(value, index) { 
    return [value]; 
}); 

var stringArray = []; 

for(var i=0;i<mileageArray.length;i++){ 
    var thisValue = mileageArray[i].value; 
    var thisValue = thisValue.replace(/\,/g,''); // remove commas added during input 
    if ($.isNumeric(thisValue) == false && thisValue != '') { 
     stringArray.push(thisValue); 
    } 
} 

if (stringArray.length > 0) { 
    alert('This should stop the form... it does not'); 
    return false; 
} 
+0

上述改變(關閉@ Jamiec的評論)修復了這個問題 - 我錯誤地調用了函數。 – Nick

回答

1

的問題是,您只是停止了每個執行return false,它不會從外部函數step_2_validation返回false。

一種選擇是恢復使用好醇」 for(...)循環,這返回了外部函數的時候它擊中return false

for(var i=0;i<mileageArray.length;i++){ 
    var thisValue = mileageArray[i];; 
    thisValue = thisValue.replace(/\,/g,''); // remove commas added during input 
    if ($.isNumeric(thisValue) == false) { 
     return false; 
    } 
} 

注意,你幾乎肯定希望這樣for(..)循環後return true,否則從你的函數的返回值將始終是falsey。

+0

'for'應該成爲'return true;'後,還是不成?否則,支票將永遠是'虛假'。 – eisbehr

+0

@eisbehr - 我想這很可能,但它不在OP的原始代碼中。你幾乎肯定是正確的 - 沒有這個函數的結果總是會是falsey(false或者undefined)。記下OP! – Jamiec

+0

感謝您的反饋!我已經設法讓它工作到「警告」消息標記正確的地步!然而'返回假';聲明不會阻止表單的繼續。代碼中的其他地方肯定有東西出錯了嗎? 編輯:我用新的代碼使用for循環更新了我的OP。 – Nick

相關問題