2012-11-29 48 views
1

我有下面的問題。我試圖做的是每次點擊一個ID爲#add_new_row的按鈕時創建一個新的TR。點擊事件添加一行,其中有一個輸入CLASS p_pocet。 在任何點擊之前,我會在每一頁加載中生成第一個TR,所以我調用函數countPolozky()給出必要的BLUR函數輸入。 問題是這樣的: 1)在第一頁加載時,我點擊頁面上唯一的一個輸入,並且獲得了我點擊的行的輸入的正確值的警報。 2)我點擊一個按鈕後添加一個新行。 jquery添加一個新行並再次調用函數countPolozky()。 (如果我不叫它,BLUR函數只對第一個TR的輸入有反應)。如果我點擊新的TR輸入,在結束焦點後,我再次獲得正確的警報,但是如果我點擊第一個TR,我會發出2條警報。我只需要一個警報即可獲取我點擊的活動行的值。 如果我添加其他行,警報只是相乘。jquery在click事件中調用函數導致函數不需要的多次調用

 (function($) { 
     $(document).ready(function() { 

        $("#add_new_row").click(function(){ 
         var pocet = parseInt($("#tbl_rows_count").attr('value')) + 1; 
         $("#tbl_rows_count").val(pocet); 
         $("#add_new_row").before('<tr></td><td><input name="pocet[]" id="pocet'+     pocet +'" class="polozky p_pocet" type="text" value="1.0"></td></tr>'); 
         $(".add_news2").click(function(){ 
          $(this).parents('tr').remove(); 
         }); 
         countPolozky(); 
        }); 
        countPolozky(); 
     }); 
    }) 
(jQuery); 

    function countPolozky()  
     { 
      //$(".polozky").die("blur"); 
      $(".polozky").blur(function() { 
       pocet = $(this).closest('tr').find('.p_pocet').val(); 
       alert(pocet); 
      });  
     } 

u能看到問題住在這裏,它是一個網站,使發票 在表格末尾有用於增加項目投入,這裏的問題。 http://www.vzor-faktury.cz/#vygenerovat-fakturu

回答

0

你有兩個選擇:

  1. 當您創建一個新的元素,新的事件處理程序只綁定到新的元素,而不是一切.polozky
  2. 使用事件代表團。

事件代理允許您在容器對象(例如表格元素)上設置單個事件處理程序,該事件處理程序將處理表格中所有.polozky元素的所有模糊事件。因此,您可以動態添加/修改/刪除所有您想要的.polozky元素,而無需綁定新的事件處理程序。

有幾篇文章談論你可以用作參考的event delegation