2013-07-12 129 views
0

我想用jQuery自動更新每行的總數,但這不能正常工作。我怎樣才能在一個表格中添加多行?

這裏是jQuery代碼:

$('.val1').keydown(function(e) { 
    var val1 = this.value; 
    var val2 = $('.val2').val(); 
    var total = val1 * val2; 
    $('.equal').val(total); 
}); 

下面是HTML代碼:

<table> 
    <thead> 
    <tr> 
     <th>Value 1</th> 
     <th>Value 2</th> 
     <th>Equal</th> 
    </tr> 
    </thead> 
    <tr> 
    <td><input class="val1" name="val1" type="text" value=""></td> 
    <td><input class="val2" name="val2" type="text" value=""></td> 
    <td><input class="equal" name="equal" type="text" value=""></td> 
    </tr> 
    <tr> 
    <td><input class="val1" name="val1" type="text" value=""></td> 
    <td><input class="val2" name="val2" type="text" value=""></td> 
    <td><input class="equal" name="equal" type="text" value=""></td> 
    </tr> 
    <tr> 
    <td><input class="val1" name="val1" type="text" value=""></td> 
    <td><input class="val2" name="val2" type="text" value=""></td> 
    <td><input class="equal" name="equal" type="text" value=""></td> 
    </tr> 
</table> 
+1

你需要認識到,使用超過一次,將是一個數組,類名。 $(」。VAL2' )VAL()。沒有意義。 –

+0

我想val1 * val2 =更新每行自動等於。 – anosim

回答

2

你需要爲目標的.val1你作用於正的來龍去脈。這裏是你將要使用的代碼:

$('.val1').keyup(function(e) { 
    var val1 = parseInt($(this).val()); 
    var val2 = parseInt($(this).parent().siblings('td').find('.val2').val()); 
    var total = val1 * val2; 
    $(this).parent().siblings('td').find('.equal').val(total); 
}); 

.keydown()改爲.keyup()因爲事件被解僱.val1收到按鍵值之前。由於您將這兩個值相乘,因此我將它們都轉換爲parseInt的數字,以便.equal不會以NaN作爲值。

你可以看到它在這裏的行動:http://jsfiddle.net/3hqkR/1/

0

$('.val2')會給你這個類名稱的所有元素的數組。

因此var val2 = $('.val2').val();將永遠不會工作。

你需要抓住的第一個元素相對於事件發生:

var val2 = $(this).prev('tr').find('.val2').val(); 
+0

'.previous()'不是一個jQuery方法。即使使用正確的'.prev()'加上'$(this)',你也不會將'.val2'作爲目標,因爲它不是'.val1'的兄弟,所以這個解決方案根本不起作用。 –

+0

你是對的安德魯。我今天生鏽了。我會解決它。 –