【问题标题】:How to wrap offending field in a div?如何将违规字段包装在 div 中?
【发布时间】:2009-10-01 09:41:05
【问题描述】:

它显示<label>标签和错误消息作为默认行为,但是我的CSS设置方式我需要一个div来环绕有问题的元素并在<p>标签中显示一个消息。

没有错误,我的 html 看起来像这样:

<div class="grid-26 append-2">
  <p class="noMarginBottom">
    <label>First Name</label>
    <div class="jNiceInputWrapper">
      <div class="jNiceInputInner">
        <input type="text" class="text jNiceInput" name="name" />
      </div>
    </div>
  </p>
  <span class="clear" />
</div>

如果出现错误,它需要看起来像这样。注意 diverror 类和 &lt;p&gt; 标签。

$(document).ready(function() {
  $("#contact_form").validate({
    rules: {
      name: {
        required: true
      }
    }
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="grid-26 append-2">
  <div class="error">
    <p>Please write your real name</p>
    <p class="noMarginBottom">
      <label>First Name</label>
      <div class="jNiceInputWrapper">
        <div class="jNiceInputInner">
          <input type="text" class="text jNiceInput" name="name" />
        </div>
      </div>
    </p>
    <span class="clear" />
  </div>
</div>

【问题讨论】:

  • 有谁知道我如何遍历错误,以便在每个错误上执行此功能: function showError(name, message) { ('[for='+name+']').parents( '.append-2') .prepend('

    '+message+'

    ') .wrapInner('
    '); }

标签: javascript jquery html validation


【解决方案1】:

这是我的完整工作代码 - 我选择使用默认的 &lt;label&gt; 标签而不是 &lt;p&gt; 标签。

$(document).ready(function(){
$("#contact_form").validate({
    rules:{
        name: {
            required: true
        },
    }
    ,messages: {
        name: "Please write your full name"
    }
    ,errorClass: "error_label"
    ,errorPlacement: function(error,element){
        parentDiv = element.parents('.grid-26');
        parentDiv.wrapInner('<div class="error"></div>');
        errorDiv = parentDiv.children(".error");
        error.appendTo(errorDiv);
    }
    ,success: function(element){
        var errorDiv = element.parents('.error');
        element.remove();
        errorDiv.siblings().remove();
        errorDiv.replaceWith(errorDiv.children());
    }

});
});

感谢您的帮助,亚历克斯!!

【讨论】:

    【解决方案2】:

    我想通了:

            ,errorPlacement: function(error,element){
    
            $('[for='+element.attr("name")+']').parents('.grid-26')
    
            .prepend('<p>'+error.text()+'</p>')
    
            .wrapInner('<div class="error"></div>');
    
        }
    

    【讨论】:

      【解决方案3】:
      label.parents('.append-2')
           .prepend('<p>Please write your real name</p>')
           .wrapInner('<div class="error"></div>');
      

      要将其恢复到以前的状态:

      var error = label.parents('.error');
      error.siblings().remove();
      error.replaceWith(error.children());
      

      【讨论】:

      • 谢谢!看起来它会比我更简单。但是,我忘了提一下,页面上有很多 append-2 div。如何修改此代码以使其脱离标签?例如`if label == name { parent.wrap('
        恐怕我不熟悉您正在使用的特定 jQuery 插件,所以我无法评论它提供的 errorPlacement 方法 - 希望您会发现它很有用。我已经更新了答案,向您展示如何从 div 内的 any 元素(包括 label)向上走。
      • 太棒了!我查找了一些文档来修改一件事。由于页面上有很多标签,我让它寻找属性,所以我做了 $('[for=name]').parents ..... .. 非常感谢您的帮助!
      • 问得有点厚脸皮,但你知道我需要用什么代码来删除这些吗?
      • 试试看。我还没有测试,所以如果它不起作用,请告诉我:)
      猜你喜欢
      相关资源
      最近更新 更多
      热门标签