欧芹表单验证 - 事件监听器

3

好的,我已经到处搜索了这个问题,但仍然无法使其工作。似乎没有人尝试过,但我确信它可以做到。

我想在我的Twitter Bootstrap项目中使用Parsley验证插件。我已经阅读了文档,但还在学习JQuery,所以它对我来说太难了(我认为它对我来说现在太高级了)。

我想添加一个自定义事件监听器到Parsley,以便在出错时显示弹出窗口而不是丑陋的li标记。这是我尝试过的:

JQUERY

$(document).ready(function () {

    $('.parsley').parsley({
        successClass: 'success',
        errorClass: 'error',
        errors: {
            classHandler: function(el) {
                return $(el).closest('.form-control');
            },
            errorsWrapper: '<div class=\"popover fade top in\" style=\"top: -20px\"></div>',
            errorElem: '<div></div>'
        }
    });


    $('.test').parsley({

        successClass: 'success',
        errorClass: 'error',
        errors: {
            classHandler: function(el) {
                return $(el).closest('.form-control');
            },
            errorElem: '<div></div>'
        },

        onFieldValidate: function ( elem ) {

            // if field is not visible, do nothing.
            if ( !$( elem ).is( ':visible' ) ) {
                $(elem).popover({
                    placement : 'top',
                    title : 'Test',
                    content : '<div id="popOverBox"><h4>Test</h4></div>'
                });
                $(elem).popover('show');
                return true;
            } else {
                $(elem).popover('hide');
                return false;
            }
        }

    });

});

顶部函数一半的功能是有效的(仅显示气泡),这只是一个暂时的hack使其暂时运行。

HTML

<head>

    <script src="../assets/js/jquery.js"></script>
    <script src="../assets/js/bootstrap.js"></script>
    <script src="../assets/js/bootstrap-tooltip.js"></script>
    <script src="../assets/js/bootstrap-popover.js"></script>
    <script src="../assets/lib/parsley/parsley.min.js"></script>

</head>

<form class="test" data-validate="parsley" novalidate>
    <input type="text" name="test" value="test" data-required="true" data-trigger="keyup change">
</form>

有人能帮我让这个工作起来吗? 注意:我更喜欢Bootstrap提示框(而不是弹出框),但如果有人能帮我处理任何一种都会很感激。

3个回答

10

你正在做一件不应该做的事情。在Parsley文档中可以看到像这样的警告:

您必须删除表单DOM中的data-validate="parsley"自动绑定代码,以允许您覆盖默认处理并仅从javascript中使用Parsley。

之后,您可以执行$('.test').parsley(...)

还要注意您错误地挂载了侦听器。正确的方法是将它们放在listener:{}属性内,就像这样:

$('.test').parsley({
    listeners: {
        onFieldValidate: function(elem, ParsleyField) {
            console.log("validate", elem);
            return false;
        },
        onFieldError: function(elem, constraints, ParsleyField) {
            console.log("error", elem);
        }
    }
});

简单的示例可以在这里找到。


不错,我会试一下的。谢谢! - Edward
我刚刚看到了那个大黄色警告!啊,我怎么会错过它! - Edward

1
你可以使用以下代码简单检查表单是否已验证。
$( '#formId' ).parsley( 'isValid' );

0

最终我将其与Bootstrap提示工具一起使用,下面的代码片段可以向无效字段添加标题。

parsleyContainer = 字段容器,例如可以是 <form> 标签。

var parsleyContainer = $(this).closest('.tab-pane');
$(parsleyContainer).attr('data-parsley-validate', 'true');
$(parsleyContainer).parsley({
    errorsContainer: function (ParsleyField) {
        return ParsleyField.$element.attr("title");
    },
    errorsWrapper: false,
});

if($(parsleyContainer).parsley().validate()) {
    //do something is validated
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接