使用标志无法停止警报两次

时间:2016-07-22 07:52:33

标签: javascript jquery

尝试编写验证库,但仍然在某处。虽然它们是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个提醒。除此之外一切正常。

3 个答案:

答案 0 :(得分:0)

@XzenTorXz的小提琴是正确答案,即https://jsfiddle.net/wvzbq9h2/3/

您的错误是您的验证在警报后返回false,但您从未使用该值来停止$.each。您需要在第一次提醒后停止$.each

答案 1 :(得分: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();
      }
    }
  }

答案 2 :(得分:0)

如果您想要一条消息:

您可以使用return false突破$.each。您还需要在成功验证时返回true:https://jsfiddle.net/wvzbq9h2/4/

如果您希望显示多条消息(如果多次验证失败),您需要收集消息(从验证中返回)并在结束时提醒它们。见https://jsfiddle.net/wvzbq9h2/6/。您还可以将2组合在一起,以便每个字段只有1条消息,请参阅:https://jsfiddle.net/wvzbq9h2/7/