2011-02-28 142 views
3

我有一個輸入列表,和其他動態加載。我需要總結他們所有人,因爲我需要檢查他們都不超過99.將工作.each(.. .change())遷移到.each(.live(「change ...」))不起作用jQuery

問題是,與.live()我無法得到它的工作,但它與.change ()。

/* this works */ 
$(".percentage").each(function() { 
    $(this).change(function() { 
     var sum = 0; 
     $(".percentage").each(function() { 
      sum += $(this).val(); 
     }); 
     alert(sum); 
    }); 
}); 

/* this don't */ 
$(".percentage").each(function() { 
    $(this).live("change keyup focus click keydown", function() { 
     var sum = 0; 
     $(".percentage").each(function() { 
      sum += $(this).val(); 
     }); 
     alert(sum); 
    }); 
}); 

預先感謝您!

回答

3

您好像誤解了live的工作原理。 live()將處理程序附加到DOM中與給定選擇器匹配的所有當前和將來元素。你正在做的是,對於當前在DOM中的每個元素有一個「百分比」類,你將一個事件綁定到當前所有具有「百分比」類的未來元素,所以每個元素以許多事件綁定結束到它。

嘗試:

$('.percentage').live('change keyup focus click keydown', function() { 
    var sum = 0; 

    $(".percentage").each(function() { 
     sum += $(this).val(); 
    }); 

    alert(sum); 
}); 

此外,val()將返回一個字符串,所以你要做的:

$(".percentage").each(function() { 
    sum += parseInt($(this).val(), 10); 
}); 
+0

謝謝。這段代碼適用於HTML中的第一個input.percentage。問題是我正在用JavaScript添加其他人,如果我加載更多,這些失敗。 :( – udexter 2011-02-28 13:57:23

+0

@udexter:他們肯定是添加了正確的類等嗎?也許顯示腳本用於添加它們? – Chris 2011-02-28 14:08:41

+0

@udexter:正如Chris所說,我們能否看到將新元素添加到DOM的腳本?我提供的代碼應該可以爲此工作 – Matt 2011-02-28 14:12:31