【问题标题】:How to validate dynamic fields (field created on the fly)如何验证动态字段(动态创建的字段)
【发布时间】:2015-01-18 01:08:33
【问题描述】:

我正在使用FormValidation 插件并且我有这个代码:

data.entities.forEach(function (value, index, array) {
    html += '<tr>';
    html += '<td><input type="checkbox" name="norm[]" id="' + value.id + '" value="' + value.id + '"></td>';
    html += '<td>' + value.code + '</td>';
    html += '<td>' + value.name + '</td>';
    html += '<td>' + value.ct + '</td>';
    html += '</tr>';
});

$("#resultadoNormaBody").html(html);

正如您所见,input type="checkbox" 元素是动态创建的,我需要对这些新字段进行验证,如何操作?我正在考虑使用这段代码作为起点,但不知道它是否会起作用,因为字段是动态创建的。

$('#normasForm').formValidation({
    framework: 'bootstrap',
    err: {
        container: 'tooltip'
    },
    row: {
        selector: 'td'
    },
    icon: {
        valid: 'glyphicon glyphicon-ok',
        invalid: 'glyphicon glyphicon-remove',
        validating: 'glyphicon glyphicon-refresh'
    },
    fields: {
        'norm[]': {
            validators: {
                notEmpty: {
                    message: 'Please choose one at least'
                }
            }
        }
    }
});

有什么建议吗?

根据答案执行测试

阅读Adding dynamic field 的文档后,我产生了第二个疑问。这是原始代码:

$('#btnBuscarNorma').on('click', function (e) {
    e.preventDefault();

    $.post(Routing.generate('filterNorm'), $('#normSearch').serialize(), 'json').done(function (data, textStatus, jqXHR) {

        if (data.entities.length > 0) {
            var html = '';
            data.entities.forEach(function (value, index, array) {
                html += '<tr>';
                html += '<td><input type="checkbox" name="norm[]" id="' + value.id + '" value="' + value.id + '"></td>';
                html += '<td>' + value.code + '</td>';
                html += '<td>' + value.name + '</td>';
                html += '<td>' + value.ct + '</td>';
                html += '</tr>';
            });

            $("#resultadoNormaBody").html(html);
        }
    });
}); 

好吗?由于添加动态字段包括这段代码,

.on('click', '.removeButton', function() {
    var $row    = $(this).parents('.form-group'),
        $option = $row.find('[name="option[]"]');

    // Remove element containing the option
    $row.remove();

    // Remove field
    $('#surveyForm').formValidation('removeField', $option);
})

我应该得到我的代码并将其放在验证器本身的.on() 中吗?我有点困惑,不知道该怎么办。这就是我的意思:

.on('click', '#btnBuscarNorma', function() {
    $.post(Routing.generate('filterNorm'), $('#normSearch').serialize(), 'json').done(function (data, textStatus, jqXHR) {

        if (data.entities.length > 0) {
            var html = '';
            data.entities.forEach(function (value, index, array) {
                html += '<tr>';
                html += '<td><input type="checkbox" name="norm[]" id="' + value.id + '" value="' + value.id + '"></td>';
                html += '<td>' + value.code + '</td>';
                html += '<td>' + value.name + '</td>';
                html += '<td>' + value.ct + '</td>';
                html += '</tr>';
            });

            $("#resultadoNormaBody").html(html);
        }
    });
})

当然我需要将字段动态添加到验证器,但这样就可以了?

【问题讨论】:

标签: javascript jquery twitter-bootstrap formvalidation-plugin


【解决方案1】:

您可以像这样使用AddField 方法:

$('#formID').formValidation('addField', $element);

$element 表示您用于验证的新元素,在本例中为您的&lt;input&gt;。

查看此文档:http://formvalidation.io/examples/adding-dynamic-field/

更新#1

解决问题的关键是获取刚刚动态添加的对象集合。

所以:

.on('click', '#btnBuscarNorma', function() {
    $.post(Routing.generate('filterNorm'), $('#normSearch').serialize(), 'json').done(function (data, textStatus, jqXHR) {

        if (data.entities.length > 0) {
            var html = '';
            data.entities.forEach(function (value, index, array) {
                html += '<tr>';
                html += '<td><input type="checkbox" name="norm[]" id="' + value.id + '" value="' + value.id + '"></td>';
                html += '<td>' + value.code + '</td>';
                html += '<td>' + value.name + '</td>';
                html += '<td>' + value.ct + '</td>';
                html += '</tr>';
            });

            $("#resultadoNormaBody").html(html);

            //get objects
            var inputs =  $("#resultadoNormaBody").find("input[name='norm[]']");
            //assume your form id is surverForm
            $('#surveyForm').formValidation('addField', inputs);
        }
    });
})

jquery 选择器input 表示&lt;input&gt; 元素,[attr='val'] 表示具有attr 属性且值为val 的元素。

这是一个示例:http://jsfiddle.net/994hL0q7/

【讨论】:

  • 你能根据你的回答看看我的编辑吗?
  • 这正在工作并显示错误消息,但对于输入无线电它显示错误 TypeError: i.data(...) is undefined
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多