【问题标题】:Validate with ParsleyJS and display errors with twitter tooltip使用 ParsleyJS 进行验证并使用 twitter 工具提示显示错误
【发布时间】:2014-02-15 01:27:12
【问题描述】:

我想使用 parsley js 验证表单并使用 twitter 的引导工具提示显示错误(如果有)。

我读过这个link 是关于 twitter 引导程序与欧芹的集成,这个stackoverflow question 是关于 EventListeners。但是,我仍然无法显示错误消息。

我就是这样实现的

... 
<input id="id_email" name="email" required=True parsley-type="email">
<button type="submit" onclick="javascript:$('#id_email').parsley(parsleyOptions); ">Next</button>
...
<script type="text/javascript" src="http://code.jquery.com/jquery-2.1.0.min.js"></script>   
<script type="text/javascript" src="{% static "js/bootstrap.min.js" %}"></script>
<script type="text/javascript" src="{% static "js/parsley/parsley.js"%}"></script>
...
    <script>

    // parsley option
    var parsleyOptions = {
      // Sets success and error class to Bootstrap class names
      successClass: 'has-success',
      errorClass: 'has-error',

      // Bootsrap needs success/error class to be set on parent element
      errors: {
        classHandler: function(el) {
          return el.parent();
        },
        // Set these to empty to make sure the default Parsley elements are not rendered
        errorsWrapper: '',
        errorElem: ''
      },
      listeners: {
        // Show a tooltip when a validation error occurs
        onFieldError: function (elem, constraints, parsleyField) {
          elem.tooltip({
            animation: false,
            container: 'body',
            placement: 'top',
            title: elem.data('error-message')
          });
        },
        // Hide validation tooltip if field is validated
        onFieldSuccess: function(elem, constraints, parsleyField) {
          elem.tooltip('destroy');
        }
      }
    };

    </script>
...

工具提示不会因表单字段中的错误而触发(即使是空字段,也不会引发错误)。我怎样才能让欧芹触发工具提示起作用?

旁注:

  • 关于“parsleyOptions”的代码取自here
  • 所有js文件都可以访问
  • 输入字段上的静态工具提示有效
  • 当错误显示在 div 中时,parsley js 起作用

【问题讨论】:

  • 我没有设置 twitter 工具提示来检查你的代码,但你能在 elem.tooltip 之前添加一个 console.log 以确保正在执行侦听器吗?
  • 监听器似乎没有被触发。没有从 console.log 打印出来
  • 从我可以调试的情况来看,parsleyOptions 没有加载。如果我执行parsley('validate'),则会显示错误消息。
  • 我只是多看了一点你的代码:你为什么onclick="javascript:$('#id_email').parsley(parsleyOptions);" 喜欢这样?您不应在单击按钮时调用 parsley,而是将其设置为在页面加载时运行。

标签: javascript jquery twitter-bootstrap listener parsley.js


【解决方案1】:

对于那些对使用 parsley 2.x 完成此任务感兴趣的人:

<form method="post" id="myForm">
    <input id="id_email" name="email" class="required" data-parsley-type="email">
    <button type="submit">Next</button>
</form>

<script type="text/javascript">
    $(document).ready(function() {  
        // instanciate parsley and set the container 
        // as the element title without a wrapper
        $("#myForm").parsley({
            errorsContainer: function (ParsleyField) {
                return ParsleyField.$element.attr("title");
            },
            errorsWrapper: false
        });

        // when there is an error, display the tooltip with the error message
        $.listen('parsley:field:error', function(fieldInstance) {
            var messages = ParsleyUI.getErrorsMessages(fieldInstance);
            fieldInstance.$element.tooltip('destroy');
            fieldInstance.$element.tooltip({
                animation: false,
                container: 'body',
                placement: 'top',
                title: messages
            });
        });

        // destroy tooltip when field is valid
        $.listen('parsley:field:success', function(fieldInstance) {     
            fieldInstance.$element.tooltip('destroy');
        });
    });
</script>

我正在使用 Bootstrap 3.2.0 和 Parsley.js 2.0.2。我用这个创建了一个小提琴:http://jsfiddle.net/C96ab/3/

【讨论】:

  • 很好的答案!我已经通过向成功事件添加操作来修改您的解决方案,因此在验证字段时会删除工具提示。 $.listen('parsley:field:success', function(fieldInstance) { fieldInstance.$element.tooltip('destroy'); });
  • 对于 Bootstrap 4.x,将 tooltip('destroy') 替换为 tooltip('dispose')。对于 Bootstrap 5.x,将 tooltip('destroy') 替换为 tooltip.dispose()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-22
  • 1970-01-01
  • 1970-01-01
  • 2014-12-11
  • 1970-01-01
相关资源
最近更新 更多