如何在提交并验证后删除动态添加的append元素?

时间:2017-10-06 06:57:19

标签: jquery forms validation datatables

使用jQuery,我有一个按钮,可以在点击时添加一个输入字段元素。成功提交到数据库后如何删除添加的元素?我应该如何验证动态添加的字段,因为它们具有动态名称?

这是表单的片段:



$(document).ready(function() {
        var wrapper = $(".input_fields_wrap");
        var count = 0;

        $('p#add_field').click(function(e) {
            e.preventDefault();
            count += 1;
            $('#container').append(
                '<div>\n\
                   <label>Weight</label><input type="text" id="weight_' + count + '" name="weight[]' + '"/>\n\
                <a href="#" class="remove_field">Remove</a><br>'
            );
        });

        $(wrapper).on("click", ".remove_field", function(e) { 
            e.preventDefault();
            $(this).parent('div').remove();
            x--;
        })
    });
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form action="" method="POST" id="productForm">
<div class="messages"></div>
   <label>Product</label><input type="text" id="product" name="product"><br>
   <div id="container" class="input_fields_wrap">
      <label>Available options:</label>
      <div>
         <p id="add_field"><button type="button" href="#"><span>Add new</span></button></p>
      </div>
   </div>
   <button type="submit" name="btnSubmit">Save to database</button>
</form>
&#13;
&#13;
&#13;

以下是工作表单的fiddle

我一直在尝试使用datatables插件来显示数据库的数据。到目前为止,我已经来到这里来验证Product字段。但是不知道如何验证动态`Weight1字段并在提交到数据库后删除字段。

$(document).ready(function() {
    var name = $("#product").val();

    if (product == "") {
        $("#product").closest('.form-group').addClass('has-error');
        $("#product").after('<p class="text-danger">The product field is required</p>');
    } else {
        $("#product").closest('.form-group').removeClass('has-error');
        $("#product").closest('.form-group').addClass('has-success');
    }

    if (product) {
        $.ajax({
            url: form.attr('action'),
            type: form.attr('method'),
            data: form.serialize(),
            dataType: 'json',
            success: function(response) {

                // remove the error 
                $(".form-group").removeClass('has-error').removeClass('has-success');

                if (response.success == true) {
                    $(".messages").html('Success');

                    // reset the form
                    $("#productForm")[0].reset();

                } else {
                    $(".messages").html('Failed.');
                }
            }
        });
    }
    return false;
});

1 个答案:

答案 0 :(得分:2)

您可以使用$("[id*='weight']")来动态创建输入字段。

以下示例删除所有动态输入字段。

$("[id*='weight']").each(function(){
    $(this).parent("div").remove();
})

下面是我点击Validate按钮时编写的示例。下面的例子只是给出一个想法。您可以根据需要进行修改。

$("#btnValidate").on("click", function(){
    var error = false;
    $("[id*='weight']").each(function(){
        if ($(this).val().trim() === "") error = true;
    });

    if (error)
    {
        alert("Please udpate weight for all rows");
        return false;
    }
})