【问题标题】:Programatically add fields to parsley form以编程方式将字段添加到欧芹形式
【发布时间】:2015-09-04 08:24:40
【问题描述】:

我正在使用 parsleyjs 来验证我的表单客户端。我有一个场景,在单击复选框时,会公开更多表单字段并需要验证。如果未单击该复选框,则表单字段将被隐藏并且需要删除验证。

欧芹有没有实现这一点的功能?我查看了文档,但只能找到有关如何通过 html 中的属性进行验证的详细信息。我正在寻找一种可以在代码中调用以添加和删除要验证的字段的方法。

【问题讨论】:

  • 您将不得不编写一些自定义 javascript 来添加和删除与 Parsley 验证相关的每个元素的数据属性。
  • 所以欧芹真的不能做到这一点?这确定是表单验证器的基本要求吗?

标签: parsley.js


【解决方案1】:

几周前我遇到了这种情况。你确实需要一点 js 来完成这个。我四处挖掘,发现了一个接近但需要一些调整以满足我的需要的脚本:它取决于预定义的字段定义。没有布埃诺。我希望它复制字段,而不管它们的名称/ID/什么。然后,当然,递增每个新字段名称。也无需克隆用户输入的任何值。

由于被克隆的字段已经进行了必要的 parsley 验证,因此它们也随之而来。

这是我想出的克隆代码。我相信它可以使用改进。 here's a fiddle 有一个工作示例。

这是我潜伏多年后的第一个贡献。要温柔。 ;)

$('#btnDel').prop('disabled', true);
$('#btnAdd').prop('disabled', false);
   $('#btnAdd').click(function() {
    var num     = $('.clonedInput').length;
    var newNum  = new Number(num + 1);

    var newElem = $('#input1').clone().val('').attr('id', 'input' + newNum);
    newElem.find(':input').attr('id', function () {
        return this.id + '_' + newNum
        });
    newElem.find(':input').attr('name', function () {
        return this.name + '_' + newNum
        });
    newElem.find(':input').val('');

    $('#input' + num).after(newElem);
    $('#btnDel').prop('disabled', false);

    if (newNum == 5){
         $('#btnAdd').prop('disabled', true);
         }
     });

     $('#btnDel').click(function() {
        var num = $('.clonedInput').length;

        $('#input' + num).remove();
        $('#btnAdd').prop('disabled', false);

        if (num-1 == 1){
            $('#btnDel').prop('disabled', true);
            }
    });

    $('#btnDel').prop('disabled', true);
});

【讨论】:

  • 嗨,丹。是的,我最终弄乱了数据属性,然后根据我的记忆调用了 parsleyrefresh。不完全理想。
  • 好的,很酷。我知道距离你最初的问题已经有一段时间了,但看到了一些我可以真正回答的东西:)
【解决方案2】:

Parsley 非常适合大多数验证场景,但在过去,我一直在努力让它完成我需要的工作 - 由于缺乏以编程方式与验证生命周期交互的能力,因此它对于更复杂的验证的用处不大。

我编写了一个名为 Okjs 的库,它的工作方式与 Parsley 非常相似,但具有额外的好处,当您需要根据用户交互向字段添加新验证器时,允许您这样做的代码 API:

https://github.com/jamesfiltness/Okjs

要在 Ok 中单击复选框添加字段,如下所示:

$('.my__checkbox').focus(function() {
  Ok.Form.addField('checkbox1', ['required']);
  Ok.Form.addField('checkbox2', ['required']);
}) 

【讨论】:

  • 詹姆斯看起来不错,但我现在离欧芹太远了,无法切换到不同的图书馆。以后会考虑的
猜你喜欢
  • 2016-05-14
  • 2016-06-18
  • 1970-01-01
  • 1970-01-01
  • 2012-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多