2016-07-22 12 views
0

検証ライブラリを作成しようとしましたが、どこかで動かなくなりました。彼らは2つの検証層ですが、一度だけ警告する方法?フラグを使用してアラート・ファイアを2回停止することができませんでした

var validation_event = { 
    mandatory: function(that) { 
     if (!$(that).val() && $(that).data('placeholder')) { 
     alert('Please fill in ' + $(that).data('placeholder') + '.'); 
     return false; 
     } 
    }, 

    email: function(that) { 

     var regex = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/; 
     if ($(that).val() == '' || !regex.test($(that).val())) { 
     alert('Please make sure the ' + $(that).data('placeholder') + ' is valid.'); 
     return false; 
     } 
    } 
    } 

https://jsfiddle.net/wvzbq9h2/

提出]をクリックしてください、あなたは2警告があります表示されます。それ以外はうまくいきます。

+1

$ .eachから終了したい場合は、 'return false'を使用できます。https://jsfiddle.net/wvzbq9h2/を参照してください。 3/ – fehrlich

+0

あなたが最初に収集する必要があるすべてのメッセージを表示し、最後に1つの警告を表示したい場合 – fehrlich

+0

@ XzenTorXz電子メールが無効であることを警告するはずですが、例がうまくいかない –

答えて

0

@XzenTorXzのフィドルは正解すなわちhttps://jsfiddle.net/wvzbq9h2/3/

あなたの間違いは、あなたの検証が警告した後、偽を返しているということですが、あなたは$.eachを停止するには、その値を使用することはありませんです。最初の警告後に$.eachを停止する必要があります。あなたは、単一のメッセージが欲しい場合は

+0

電子メールが有効ではないとの警告が表示されません。フィドルを確認する –

0
$(function() { 
    var options = ['mandatory', 'email']; 

    var validation_event = { 
    mandatory: function(that) { 
     if (!$(that).val() && $(that).data('placeholder')) { 
     alert('Please fill in ' + $(that).data('placeholder') + '.'); 
     that.stopPropagation(); 
     } 
    }, 

    email: function(that) { 

     var regex = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/; 
     if ($(that).val() == '' || !regex.test($(that).val())) { 
     alert('Please make sure the ' + $(that).data('placeholder') + ' is valid.'); 
     that.stopPropagation(); 
     } 
    } 
    } 
+0

イベントではなくjquery要素を渡すので、stopPropagationは機能しません – fehrlich

+0

これをチェックするだけで動作します –

関連する問題