简体   繁体   English

通过AJAX调用填写具有相同名称的动态表单字段

[英]Fill out dynamic form fields with the same name via AJAX call

Well hi everybody, 大家好,

I have the following form: 我有以下表格:

<form method="post">
  <input type="text" name="meta_key[]"> - <input type="text" name="meta_value[]"> - <input type="text" name="meta_desc[]">
  <input type="text" name="meta_key[]"> - <input type="text" name="meta_value[]"> - <input type="text" name="meta_desc[]">
  <input type="text" name="meta_key[]"> - <input type="text" name="meta_value[]"> - <input type="text" name="meta_desc[]">
</form>

I call data via AJAX: 我通过AJAX调用数据:

    // Call Dynamic Data
    get_dynamic_data = function (checklist_id)
    {
        $.getJSON(MAP_URL+'onderhoud/handle/fetch_data.php?cat=get_dynamic&checklist_id='+ checklist_id, function(data) 
        {
            var section = "";
            $('#collapseDynamic').collapse({show: true});
            $('.togglerDynamic span:first').removeClass("badge-success").addClass("badge-danger");
            $('.togglerDynamic span').eq(1).removeClass("oi-plus").addClass("oi-minus");
            $('#dynamic').val("1");

            $.each(data, function(key, value)
            {
                $.each(value, function(vars, values)
                {
                    $('#edit_checklist').find('input[type="text"][name="' + section + vars + '"]').val(values);
                    $('#edit_checklist').find('input[type="text"][name="' + section + vars + '[' + key + ']"]').val(values);
                    $('#edit_checklist').find('input[type="checkbox"][name="' + section + vars + '"]:checked').removeAttr('checked');
                    $('#edit_checklist').find('input[type="checkbox"][name="' + section + vars + '[' + key + ']"]:checked').removeAttr('checked');
                    $('#edit_checklist').find('input[type="checkbox"][name="' + section + vars + '"][value="' + values + '"]').attr('checked', 'checked');
                    $('#edit_checklist').find('input[type="checkbox"][name="' + section + vars + '[' + key + ']"][value="' + values + '"]').attr('checked', 'checked');
                })
            });
        })
        // using the fail promise callback
        .fail(function( jqxhr, textStatus, error ) {
            var err = textStatus + ", " + error;
            console.log( "Request Failed: " + err );
        });
    }
    get_dynamic_data(checklist_id);
    // End Call Dynamic Data

I know the code above can be much better, but that's not the point at this moment. 我知道上面的代码可以做的更好,但这不是目前的重点。

I want to populate the dynamic fields. 我想填充动态字段。

My response from the ajax call: 我对ajax调用的回复:

{id: "1", checklist_id: "20170001", meta_key: "dfghdfgh", meta_value: "niet-goed", meta_desc: "asdfasdf"}
{id: "2", checklist_id: "20170001", meta_key: "ghjhgjghfj", meta_value: "nvt", meta_desc: "ghjfghjgj"}
{id: "3", checklist_id: "20170001", meta_key: "werqwerwe", meta_value: "goed", meta_desc: "werqwerwer"}

How do i get the fields populated in the right order?? 我如何以正确的顺序填充字段?

(id is not always 1, 2, 3, It can also be 16, 19, 450) (id并不总是1、2、3,也可以是16、19、450)

Can't get my head arround this... 这让我无法理解...

Thank you in advance!! 先感谢您!!

I know the code above can be much better, but that's not the point at this moment. 我知道上面的代码可以做的更好,但这不是目前的重点。

You can use the key of the array to populate the forms. 您可以使用数组的key来填充表单。

 $(document).ready(function() { var data = [{ id: "1", checklist_id: "20170001", meta_key: "dfghdfgh", meta_value: "niet-goed", meta_desc: "11 asdfasdf" }, { id: "2", checklist_id: "20170001", meta_key: "ghjhgjghfj", meta_value: "nvt", meta_desc: "ghjfghjgj" }, { id: "3", checklist_id: "20170001", meta_key: "werqwerwe", meta_value: "goed", meta_desc: "werqwerwer" }] //Loop each result for (var key in data) { $($("input[name='meta_key[]']")[key]).val(data[key]["meta_key"]); $($("input[name='meta_value[]']")[key]).val(data[key]["meta_value"]); $($("input[name='meta_desc[]']")[key]).val(data[key]["meta_desc"]); } }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> <form method="post"> <input type="text" name="meta_key[]"> - <input type="text" name="meta_value[]"> - <input type="text" name="meta_desc[]"> <br /> <input type="text" name="meta_key[]"> - <input type="text" name="meta_value[]"> - <input type="text" name="meta_desc[]"> <br /> <input type="text" name="meta_key[]"> - <input type="text" name="meta_value[]"> - <input type="text" name="meta_desc[]"> </form> 


Note: 注意:

$("input[name='meta_key[]']")[0] <- This will select the first input with name meta_key[] $("input[name='meta_key[]']")[0] <-这将选择名称为meta_key[]的第一个input

Yeah it worked!!! 是的,它有效!!!

$.each(data, function(key, value)
            {
                $.each(value, function(vars, values)
                {
                    console.log(key + ' = ' + vars);
                    $($('input[type="text"][name="' + section + vars + '[]"]')[key]).val(values);
                    $($('input[type="checkbox"][name="' + section + vars + '[]"]:checked')[key]).removeAttr('checked');
                    $($('input[type="checkbox"][name="' + section + vars + '[]"][value="' + values + '"]')[key]).attr('checked', 'checked');
                });
                i++;
                if(i < data.length)
                {
                    add_dynamic();
                }
            });

Thank you so much!! 非常感谢!!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM