1

テーブルの行を複製するたびに、オートコンプリート フィールドを初期化する必要があります。これまでのところ、ページの読み込み時に最初の行のみを初期化しています。ここに私のコードがあります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;

    });   

}
4

2 に答える 2

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>
     ...
于 2012-11-16T20:00:53.030 に答える
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));
于 2012-11-16T20:08:44.103 に答える