【问题标题】:Jquery validation not required field tooltip message issueJquery验证不需要字段工具提示消息问题
【发布时间】:2017-01-17 16:08:00
【问题描述】:

我正在使用 jquery 验证并使用引导工具提示显示错误消息。这工作正常,但是当我在不需要的字段中插入不正确的值,然后删除文本并将字段留空时,输入中的突出显示效果消失但工具提示仍然可见。

JS

$('#myform').validate({ // initialize the plugin
  onkeyup: false,
  rules: {
    field1: {
      required: true,
      number: true
    },
    field2: {
      number: true
    }
  },
  errorPlacement: function (error, element) {
    var lastError = $(element).data('lastError'),
        newError = $(error).text();
    $(element).data('lastError', newError);
    if (newError !== '' && newError !== lastError) {
      $(element).tooltip({
        placement: "bottom",
        trigger: "manual"
      }).attr('title', newError).tooltip('fixTitle').tooltip('show');
    }
  },
  success: function (label, element) {
    $(element).tooltip('hide');
  }
});

HTML

<form id="myform">
  <input type="text" name="field1" />
  <input type="text" name="field2" />
  <input type="submit" />
</form>

为了解决我的问题,我尝试使用 unhighlight 方法,但仅在第一次有效,然后在同一字段中重新插入不正确的值时不再显示工具提示

 unhighlight: function(element, errorClass, validClass) {
    $(element).removeClass(errorClass).addClass(validClass);
    $(element).tooltip('hide');
 }

在第二个字段中输入文本,然后将其删除。 jsfiddle

如何解决我的问题?谢谢

【问题讨论】:

    标签: jquery twitter-bootstrap jquery-validate


    【解决方案1】:

    可以被认为是一项黑客工作,但收听blur 事件并在为空时清除工具提示,效果很好:

    $("input").blur(function () {
      if (!this.value.trim().length)
        $(this).tooltip("hide");
    });
    

    片段

    $('#myform').validate({ // initialize the plugin
      onkeyup: false,
      rules: {
        field1: {
          required: true,
          number: true
        },
        field2: {
          required: false,
          number: true
        }
      },
      errorPlacement: function(error, element) {
        var lastError = $(element).data('lastError'),
            newError = $(error).text();
        $(element).data('lastError', newError);
        if (newError !== '') {
          $(element).tooltip({
            placement: "bottom",
            trigger: "manual"
          }).attr('title', newError).tooltip('fixTitle').tooltip('show');
        }
      },
      success: function(label, element) {
        $(element).tooltip('hide');
      }
    });
    $("input").blur(function() {
      if (!this.value.trim().length)
        $(this).tooltip("hide");
    });
    #myform {
      width: 600px;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
    <script type="text/javascript" src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.15.0/jquery.validate.min.js"></script>
    <form id="myform">
      <input type="text" name="field1" />
      <input type="text" name="field2" />
      <input type="submit" />
    </form>

    JsFiddle:https://jsfiddle.net/reo1ck3e/

    【讨论】:

    • 很遗憾只有第一次有效,然后在同一字段中重新插入错误值时不再显示工具提示
    • @PaoloRossi 删除了这条规则:` && newError !== lastError` 并且它有效。请检查。
    • 完美!谢谢!
    猜你喜欢
    • 1970-01-01
    • 2011-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-31
    • 1970-01-01
    相关资源
    最近更新 更多