克隆表中的行时初始化自动完成

时间:2012-11-16 19:47:13

标签: jquery jquery-ui

每次在表格中克隆一行时,我都需要初始化自动填充字段。到目前为止,只是在页面加载时初始化我的第一行。这是我的代码http://jsfiddle.net/4XZMb/951/

function addRow(){

    var numberExistingRows = 1;
    //  use "ADD" button to add new row

    $('#add_row').click(function() {
        // keep track of number of rows for input names
        numberExistingRows++;

        // clone a row
        var $row = $('.dataRow:last').clone();

        $row.find('.deleteRow').click(deleteRow);

        // strip previous values and fix names of inputs
        $row.find('input').each(function() {
            var $input = $(this); // cache this input into jQuery object in lieu of using $(this) in below functions for clarity and performance

            $input.val(""); // reset value to none

            // fix names
            var thisInputName = $input.attr('id');
            $input.attr('id', thisInputName);
        });

        $('#tableSo').append($row);

        return false;

    });   

}

2 个答案:

答案 0 :(得分:0)

您有多个具有相同ID的元素。这不是有效的HTML。而是使用一个类来指定它是一种特定类型的自动完成,然后在新行中选择要初始化该类。

function autocompleteSo(row){

    row.find( ".tableService" ).autocomplete({
            source: 'services/add_services.php?servtype=1',
            select: function(event, ui) {
            row.find('.id_servtype').val(ui.item.id);

        }
     });

     row.find( "soClient" ).autocomplete({
            source: 'salesorders/add_sales_order.php?client=1',
            select: function(event, ui) {
            row.find('id_client').val(ui.item.id);

        }
     });

     row.find( "tableProject" ).autocomplete({
            source: 'salesorders/add_sales_order.php?project=1',
            select: function(event, ui) {
            row.find('id_project').val(ui.item.id);

        }
     });
}

像这样,然后在创建行时调用autocompleteSo。

 <tr class="dataRow soRows">
     <td>
         <input type="text" class="input-medium tableService" name="tableService" />
         <input type="hidden" class="id_servtype" name="id_servtype[]" />
     </td>
     ...

答案 1 :(得分:0)

我已更新了您的jsFiddle

我将id更改为了类,以便与重复的id没有冲突。

var autocompleteSo = function(row){
    var $row = $(row)
    $row.find( ".tableService" ).autocomplete({
            source: 'services/add_services.php?servtype=1',
            select: function(event, ui) {
            $('.id_servtype').val(ui.item.id);

        }
     });

     $row.find( ".soClient" ).autocomplete({
            source: 'salesorders/add_sales_order.php?client=1',
            select: function(event, ui) {
            $('.id_client').val(ui.item.id);

        }
     });

     $row.find( ".tableProject" ).autocomplete({
            source: 'salesorders/add_sales_order.php?project=1',
            select: function(event, ui) {
            $('.id_project').val(ui.item.id);

        }
     });
}

然后在行的追加之后,我会运行此代码。

$('#tableSo').append($row);
autocompleteSo($('#tableSo tr').eq(numberExistingRows - 1));