2011-05-17 83 views
1

我的腳本有問題。它的目的是根據下拉列表中的值在字段中顯示一些值。 當我觸發其他正在添加或刪除具有相同字段的表單中的新行的腳本,但是不同的行ID時,它將停止爲新添加的行工作。ajax腳本僅適用於頁面刷新時的第一行

<script> 
<?php echo 'var lista = '.form_dropdown('produkt[]',$lista).';'?> 
$(document).ready(function() { 
    $('select[name="produkt[]"]').change(function() { 
     var id = $('select[name="produkt[]"] option:selected').val(); 
     var par = $(this).closest('tr').attr('id'); 
     $.getJSON(
      '<?php echo $head['site_link'];?>index.php/faktura/pobierzProdukt/'+id, 
      function(data){ 
       var id = $('#'+par); 
       $('input[name="pkwiu[]"]',id).val(data.product_pkwiu); 
       $('input[name="netto[]"]',id).val(data.product_netto); 
       $('input[name="vat[]"]',id).val(data.product_vat); 
       $('input[name="brutto[]"]',id).val(data.product_brutto); 
       $('input[name="jedn[]"]',id).val(data.product_jedn); 
      }, 
      'json' 
     ); 
    }); 

    $('#dodajWiersz').click(function() { 
     var liczba = $('#produkty tr').length; 
     var inputArray = [ 
      '1', 
      lista, 
      '<input type="text" name="pkwiu[]" class="short" readonly="readonly"/>', 
      '<input type="text" name="netto[]" class="short" readonly="readonly"/>', 
      '<input type="text" name="vat[]" class="mini" readonly="readonly"/>', 
      '<input type="text" name="brutto[]" class="short" readonly="readonly"/>', 
      '<input type="text" name="jedn[]" class="mini" readonly="readonly"/>', 
      '<input type="text" name="ilosc[]" class="short"/>', 
      '<input type="text" name="knetto[]" class="short" readonly="readonly"/>', 
      '<input type="text" name="kvat[]" class="short" readonly="readonly"/>', 
      '<input type="text" name="kbrutto[]" class="short" readonly="readonly"/>' 
     ]; 
     var tdString = '<td>'+inputArray.join('</td><td>')+'</td>'; 
     if($('#produkty tbody tr').length>0) { 
      var row = '<tr id="wiersz-'+liczba+'">'+tdString+'</tr>'; 
      $('#produkty').find('tbody').append(row); 
      $('#produkty tr:last td:first-child').text(liczba); 
     } 
     else { 
      var row = '<tr id="wiersz-1">'+tdString+'</tr>'; 
      $('#produkty').find('tbody').append(row); 
     } 
    }); 

    $('#usunWiersz').click(function() { 
     $('#produkty').find('tbody tr:last').remove(); 
    }); 
}); 
</script> 

我認爲問題是$(document).ready()函數。但我解決不了。

更新: 看來,DOM沒有更新。我可以在Firebug中看到新的HTML結構,但在源視圖中是舊結構。我認爲這很重要。

回答

0

$(本).closest( 'TR')ATTR( 'ID'),你可能總是有相同的ID

VAR行= '' + tdString + ''。

你總是追加相同的ID。

+0

var row工作正常,但也許你是正確的$(this).closest().....我會檢查出來。 更新: 它也能正常工作 – sunpietro 2011-05-18 05:16:57

+0

我改了一點代碼。我用live()替換了change()和click()函數。它似乎工作一點,但我不能讓它適用於除第一個行之外的所有行。其他行從第一行的選擇菜單中獲取值。 – sunpietro 2011-05-18 05:52:50

+0

問題與URL不變。 getJSON返回數據時如何使它爲空? – sunpietro 2011-05-18 06:12:51

0

答案是改變:var id = $('select[name="produkt[]"] option:selected').val();轉換爲var id = $(this).val(); 它似乎是一個選項的問題:selected。