自动填充多个文本字段和下拉列表

时间:2014-09-12 07:37:25

标签: php jquery

我在尝试自动填充多个文本字段以及下拉列表时出现问题...此UI从数据库中提取数据以进行自动填充...实际上,当我单击+按钮添加其他内容时会出现问题textfield和下拉列表...对于第一个文本字段和下拉列表我正在自动填充,但是当我尝试第二行时我遇到问题...请更正我的错误

`              

    </title>

    <link rel="stylesheet" type="text/css" href="jquery-ui.css"/>
    <link rel="stylesheet" type="text/css" href="css/style.css"/>
    <script src="jquery-1.11.0.min.js"></script>

    <script src="jquery-ui.js"></script>

    <script type="text/javascript">

     $(document).ready(function() {

            $('#add1').click(function() {



                $("#box").append(
                        $('<div><input type="text" name="property_id" id="property_id"/>\n\
                            <select disabled="" name="unit_id" id="unit_id">\n\
                                    <option></option>\n\
                            </select><img src="remove.png" width="20" height="20" border="0" align="top" class="add1" id="remove" /><br></div>')



                        );


            });



            $('body').on('click', '#remove', function() {

                $(this).parent('div').remove();


            });


        });

    </script>
    <script type="text/javascript">







        jQuery(document).ready(function() {
            $('#property_id').autocomplete({
                source: 'unit.php',
                minLength: 1,
                select: function(evt, ui)
                {
                    $.ajax({
                        url: "property.php",
                        data: {propertyid: ui.item.property_id},
                        dataType: 'json',
                        type: 'POST',
                        success: function(data) {
                            var pname = ui.item.value;
                            console.log("combo data === ", pname, data);
                            $('select[name="unit_id"]').empty();
                            $('select[name="unit_id"]').append($('<option>').text("Select"));
                            for (var i = 0; i < data.length; i++) {
                                $('select[name="unit_id"]').append(
                                        $('<option>', {value: data[i]["unit_id"]}).text(data[i]["unit_id"])
                                        );
                            }
                            $('select[name="unit_id"]').removeAttr('disabled');
                        }
                    });
                }
            });
        });
    </script>

</head>
<body>
    <div id="box">
    <input type="text" name="property_id" id="property_id"/>
    <select disabled="" name="unit_id" id="unit_id">
        <option></option>
    </select>
    <img src="add.png" width="20" height="20" border="0" align="top" class="add" id="add1" /><br>
    </div>
</body>

`

2 个答案:

答案 0 :(得分:0)

单击“添加”时,您将创建与现有元素具有相同ID的元素,因此这将失败。为您创建的元素添加唯一ID。

如果您要提交,或者将它们添加为数组

,您还需要唯一的名称

我也更改了你的删除ID并更改了类:

<script type="text/javascript">

 $(document).ready(function() {

        var i = 0;

        $('#add1').click(function() {


            $("#box").append(


                $('<div><input type="text" class="property_input" name="property_id[]" id="property_id' + i + '"/>\n\
                        <select disabled="" class="unit_select" name="unit_id[]" id="unit_id' + i + '">\n\
                                <option></option>\n\
                        </select><img src="remove.png" width="20" height="20" border="0" align="top" class="remove" /><br></div>')



                    );

            i++;

        });



        $('body').on('click', '.remove', function() {

            $(this).parent('div').remove();
            i--;

        });


    });

</script>

我不确定自动完成是如何工作的,但我认为你必须给你的选择并输入一个类(就像我已经完成的那样)并循环遍历它们,获取id并调用你的ajax

答案 1 :(得分:0)

这是因为您在加载时绑定了自动完成功能。因此,您创建的新项目不会与ui代码绑定。

您应该使用自动填充功能绑定您创建的新项目。就像你在加载时那样。

您可以绑定一个函数并在加载时调用它,并在创建项目后调用它。喜欢,

var bindAutoComplete = function(elem) {
    $(elem).autocomplete({
                source: 'unit.php',
                minLength: 1,
                select: function(evt, ui)
                {
                    $.ajax({
                        url: "property.php",
                        data: {propertyid: ui.item.property_id},
                        dataType: 'json',
                        type: 'POST',
                        success: function(data) {
                            var pname = ui.item.value;
                            console.log("combo data === ", pname, data);
                            $('select[name="unit_id"]').empty();
                            $('select[name="unit_id"]').append($('<option>').text("Select"));
                            for (var i = 0; i < data.length; i++) {
                                $('select[name="unit_id"]').append(
                                        $('<option>', {value: data[i]["unit_id"]}).text(data[i]["unit_id"])
                                        );
                            }
                            $('select[name="unit_id"]').removeAttr('disabled');
                        }
                    });
                }
            });
}

然后在你的负载

jQuery(document).ready(function() {
            bindAutoComplete($('#property_id')[0]);

});

并在您的添加项目方法

$('#add1').click(function() {

var newItem = $('<div><input type="text" name="property_id" id="property_id"/>\n\
                            <select disabled="" name="unit_id" id="unit_id">\n\
                                    <option></option>\n\
                            </select><img src="remove.png" width="20" height="20" border="0" align="top" class="add1" id="remove" /><br></div>');

bindAutoComplete(newItem.find("#property_id")[0]);

                $("#box").append(newItem);


            });

警告,这段代码看起来很乱,但为了让你明白绑定,这应该可行。