2016-09-14 9 views
0

以下は、作成したフォームの検証です。ステップ2の提出にstep_2_validation()関数を含めます。return false値が数値でない場合

この関数は、入力に文字列が含まれていてもフォームが正しくない場合にfalseを返します。ステートメント。私はここで何が欠けていますか?あなたは、単にそれぞれの実行を停止しているreturn falseが、それはあなたの外側の関数step_2_validationから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

問題があります、。

1つのオプションは、それがreturn falseに当たったとき外側の関数の外に戻ります古き良きfor(...)ループを使用してに戻すことです。

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のオリジナルコードではありませんでした。あなたはほぼ確実ですが、関数の結果は常にfalse(falseまたはundefinedのいずれか)になります。メモOPを取る! – Jamiec

+0

フィードバックをお寄せいただきありがとうございます。私は「警告」メッセージが正しく旗を立てるように働くようになった!しかし、「返品虚偽」ステートメントは単にフォームの処理を停止しません。コードのどこかにバグがあるはずですか? 編集:forループを使用してOPを新しいコードで更新しました。 – Nick

関連する問題