2016-07-22 21 views
0

私は2つのalert()を持っています。 'return false'を使用しようとしていて、うまくいくと期待しています。戻り値falseはJavaScriptオブジェクトでは機能しません

$(function() { 
    var options = ['mandatory', 'email']; 
    var validation_event = { 
    mandatory: function(that) { 
     if (!$(that).val() && $(that).data('placeholder')) { 
     alert('Please fill in ' + $(that).data('placeholder') + '.'); 
     return false; // this is not working? I want to alert only one alert 
     } 
    } 
    } 

    function init() { 
    $('input,select,textarea').each(function() { 
     var self = $(this); 

     $.each(options, function(i, val) { 
     var attr = self.attr(val); // option array 
     if (typeof attr !== typeof undefined && attr !== false) { 
      validation_event[val](self); 
     } 
     }); 
    }); 
    } 

    $('#submit').click(function(e) { 
    e.preventDefault(); 
    init(); 
    }) 

}) 

いつも再利用できる検証ロジックを作成しようとしていました。あなたが検証関数からfalseを返す場合でも

https://jsfiddle.net/m5jsscp7/

答えて

1

問題があり、各ループは実行し続けます。

検証が失敗した場合

、私はもっと単純な論理で行うことができます

$(function() { 
 
    var options = ['mandatory', 'email']; 
 
    var validation_event = { 
 
    mandatory: function(that) { 
 
     if (!$(that).val() && $(that).data('placeholder')) { 
 
     alert('Please fill in ' + $(that).data('placeholder') + '.'); 
 
     return false; // this is not working? I want to alert only one alert 
 
     } 
 
     return true; 
 
    }, 
 
    email: function() { 
 
     return true; 
 
    } 
 
    } 
 

 
    function init() { 
 
    var valid = true; 
 
    $('input,select,textarea').each(function() { 
 
     var self = $(this); 
 

 
     $.each(options, function(i, val) { 
 
     var attr = self.attr(val); // option array 
 
     if (typeof attr !== typeof undefined && attr !== false) { 
 
      valid = validation_event[val](self) && valid; 
 
     } 
 
     return valid; 
 
     }); 
 
    return valid; 
 
    }); 
 
    return valid; 
 
    } 
 

 
    $('#submit').click(function(e) { 
 
    e.preventDefault(); 
 
    console.log(init()); 
 
    }) 
 

 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type="text" name="fname" id="fname" mandatory data-placeholder="First Name"> 
 
<input data-placeholder="Email Address" type="text" id="email" mandatory email name="email" value=""> 
 
<button id="submit">Submit</button>

+0

のように、さらに実行をスキップする各ハンドラからfalseを返すことができますか?真実を返すにはあまりにも多くの文章を書きません。可能? –

+0

これはなぜ機能していないのですか? http://pastebin.com/PiGazwCW –

関連する問題