2016-04-05 55 views
2

我想寫一些簡單的HTML/jQuery將應用相同的計算到不同的領域。應用相同的計算,以不同的輸入使用JQuery

我簡單的問題到下面的HTML:

<h1>Multiplication by line</h1> 
<table> 
    <tr> 
    <td>Number 1</td> 
    <td>Number 2</td> 
    <td>Result</td> 
    </tr> 
    <!-- LINE ITEM START --> 
    <div class="lineitem"> 
    <tr> 
     <td> 
     <input type="number" name="a" class="a" value="" /> 
     </td> 
     <td> 
     <input type="number" name="b" class="b" value="" /> 
     </td> 
     <td> 
     <div class="total">0 </div> 
     </td> 
    </tr> 
    </div> 
    <!-- LINE ITEM END --> 
    <div class="lineitem"> 
    <tr> 
     <td> 
     <input type="number" name="a" class="a" value="" /> 
     </td> 
     <td> 
     <input type="number" name="b" class="b" value="" /> 
     </td> 
     <td> 
     <div class="total">0</div> 
     </td> 
    </tr> 
    </div> 

和jQuery:

$(document).ready(function() { 

    $(".lineitem").each(function() { 

    function compute() { 

     var a = $('.a').val(); 
     var b = $('.b').val(); 
     var total = (a * b); 

     $('.total').text(total); 

    } 

    $('.b, .a').change(compute); 

    }) 
}); 

但這返回基於第一線的數據條目中的每個線相同的結果。我顯然希望用戶在每一行中輸入不同的值,並獲得每行不同的結果。我試着用「每」和「$(本)。兒童」如下,但它沒有工作:

$(document).ready(function() { 


$(".lineitem").each(function() { 

    function compute() { 

     var a = $(this).children('.a').val(); 
     var b = $(this).children('.b').val(); 
     var total = (a*b); 

     $(this).children('.total').text(total); 

    } 

     $('.b, .a').change(compute); 

     })}); */ 

Here's a JSFiddle with everything.

真的希望有人能幫助!我已經做了搜索對基本問題公平一點,但沒有喜悅在這裏...道歉,如果這是一個重複

+0

被包圍在'div'? –

回答

0

這可能有幫助。

$(document).ready(function() { 
 
    $('.a, .b').change(function() { 
 
    var tr = $(this).closest('tr'); 
 
    var a = parseInt(tr.find('.a').val()) || 0; 
 
    var b = parseInt(tr.find('.b').val()) || 0; 
 
    tr.find('.total').html(a + b); 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<h1>Multiplication by line</h1> 
 
<table> 
 
    <tr> 
 
    <td>Number 1</td> 
 
    <td>Number 2</td> 
 
    <td>Result</td> 
 
    </tr> 
 
    <!-- LINE ITEM START --> 
 
    <div class="lineitem"> 
 
    <tr> 
 
     <td> 
 
     <input type="number" name="a" class="a" value="" /> 
 
     </td> 
 
     <td> 
 
     <input type="number" name="b" class="b" value="" /> 
 
     </td> 
 
     <td> 
 
     <div class="total">0</div> 
 
     </td> 
 
    </tr> 
 
    </div> 
 
    <!-- LINE ITEM END --> 
 
    <div class="lineitem"> 
 
    <tr> 
 
     <td> 
 
     <input type="number" name="a" class="a" value="" /> 
 
     </td> 
 
     <td> 
 
     <input type="number" name="b" class="b" value="" /> 
 
     </td> 
 
     <td> 
 
     <div class="total">0</div> 
 
     </td> 
 
    </tr> 
 
    </div>

每個`tr`的
+0

非常感謝,這對我有很大的幫助。現在的問題是,我的實際代碼有點複雜,我希望你可以幫我解決一個問題。 基本上我試圖創建一個能源使用計算器,所以與基本的逐行計算一起,在計算中使用了一個通用字段(即您的能源價格)。 當您輸入新信息時,您的代碼已經幫助我足夠了,每行都會自動更新,但是當您更改「kwh」字段時,我還希望它自動更新所有內容(每個總數)。 示例:https:/ /jsfiddle.net/n5pq14d1/1/ – fungiblecommodity

+0

@fungiblecommodity:檢查是否有幫助https://jsfiddle.net/n5pq14d1/2/ ?? – Pugazh

+0

非常感謝。我所要做的就是將kwh var更改爲此,並且它完美地工作: $('tr:not(:first)')。each(function(){varier = parseInt($(this).find ('#a')。val())|| 0; var b = parseInt($(this).find('#b')。val())|| 0; var c = parseInt($(這個).find('#c')。val())|| 0; var kwh = $('#kwh')。val(); 非常感謝您的幫助。 – fungiblecommodity

1

這裏是一個working Fiddle

在你的代碼中的錯誤是你正在使用類玩的元素,但你沒有限制計算只發生在所需的線。所以修正是when ever there is a change in the input elements, find the closest tr in which it is wrapped , and now find the items within this tr and do the calculations.

更改您的函數,以限制計算到特定行。

function compute() {  
    var $parentTr = $(this).closest('tr'); // find the tr which wraps this element. 
    var a = $parentTr.find('.a').val();// find .a within this tr 
    var b = $parentTr.find('.b').val();// find .b within this tr 
    var total = (a * b); 

    $parentTr.find('.total').text(total);// change .total within this tr 
} 
相關問題