2014-08-27 58 views
0

我試圖將兩個已經有值的輸入相加在一起。如果其他兩個輸入中的任何一個輸入發生變化,我希望總和能夠改變數值。我有這樣的下面,但它不工作:基於兩個輸入的太陽取代輸入的值

<?php 


while($row = mysqli_fetch_array($test)) { 
echo "<tr class='saved_add'>"; 
echo "<td><input/></td>"; 
echo "<td><input/></td>"; 

echo "<td><select'>"; 
echo "<option value='service'"; 
if ($row['type'] == "service") { 
echo "selected='selected'";} 
echo ">Service</option>"; 
echo "<option value='hours'"; 
if ($row['type'] == "hours") { 
echo "selected='selected'";} 
echo ">Hours</option>"; 
echo "<option value='days'"; 
if ($row['type'] == "days") { 
echo "selected='selected'";} 
echo ">Days</option>"; 
echo "<option value='product'"; 
if ($row['type'] == "product") { 
echo "selected='selected'";} 
echo ">Product</option></select></td>"; 

echo "<td><input/></td>"; 
echo "<td><input/></td>"; 
echo "<td><input/></td>"; 
echo "<td><input/></td>"; 
echo "<td><input class='subtotal'/></td>"; 
echo "</tr>"; 
} 


mysqli_close($con); 
?> 

JQuery的:

$('.saved_add').each(function() { 
    sum = $('input:eq(2)', this).val() * $('input:eq(5)', this).val(); 
    $(".subtotal").text(sum); 
}); 

什麼想法?

+1

只是一個想法...打開一個調試器和調試。 jQuery選擇器是否解決了正確的元素?你總結了幾個問題嗎?代碼是否被執行? – Malk 2014-08-27 23:07:33

+0

多數民衆贊成在這個事情@malk它不顯示任何錯誤 – lancey 2014-08-27 23:18:17

回答

0

當您在元素上調用.val()時,它將以字符串形式返回其值。您必須先將其轉換爲數字,然後才能對其進行數學運算。要將字符串轉換爲整數,可以使用parseInt()方法。

$('.saved_add').each(function() { 
    var sum = $('input:eq(2)', this).val() * $('input:eq(5)', this).val(); 
    $(".subtotal").text(sum); 
}); 
1

這些方針的東西:在加載時

function calculateSum() { 
    $('.saved_add').each(function() { 
    sum = $('input:eq(2)', this).val() * $('input:eq(5)', this).val(); 
    $(".subtotal").text(sum); 
    }); 
    } 

// On first load 
calculateSum(); 

// On change 
$("input").change(calculateSum); 

您的代碼將只計算值。你想在加載時計算它,當值改變時,所以你需要.change()函數。

+0

感謝回答弗朗西斯科,但每個語句是爲每個所以$(「輸入:eq(2),輸入:eq(5)」)。 (calculateSum);不會工作。 – lancey 2014-08-27 23:25:17

+0

我沒有看到你添加的html代碼。然而,這一點仍然有效,你需要更新它時,輸入更改(編輯顯示一種通用的方式) – 2014-08-27 23:33:35

+0

對不起,但這不工作以及 – lancey 2014-08-27 23:50:21

0

編輯,更新

嘗試

$('.saved_add').each(function(i, el) { 
    $(el).on("change", function() { 
     // cast `sum` as `Number` 
     sum = Number($('input:eq(2)', this).val() * $('input:eq(5)', this).val()); 
    $(".subtotal").text(sum); 
}).change(); 
}); 

的jsfiddle http://jsfiddle.net/guest271314/20jeoc9y/

+0

這不會工作,因爲沒有每個語句。我需要每個語句,因爲輸入是動態創建的。 – lancey 2014-08-27 23:28:09

+0

感謝您的幫助,但該工作適用於多個輸入。 – lancey 2014-08-27 23:46:08

+0

「,該工作適用於多個輸入。」 ?在OP提供的2個元素的post/jsfiddle返回產品。如果可能的話,請在崗位描述問題,要求的具體細節?謝謝 – guest271314 2014-08-28 00:14:01

0

謝謝大家的幫助,我理解了它。幫助將每個輸入作爲ID,以便相應地更改它。

HTML:

<div id="saved1"> 
    <input type="text" value="10" /><input type="text" value="10" /> <input type="text" value="10" />  
    <div id="subtotal1"></div> 
</div> 
<div id="saved2"> 
    <input type="text" value="10" /><input type="text" value="10" /> <input type="text" value="10" />  
    <div id="subtotal2"></div> 
</div> 

JQuery的:

function calculateSum() { 
    $("[id^=saved]").each(function() { 
    sum = $('input:eq(0)', this).val() * $('input:eq(1)', this).val(); 
    $('input:eq(2)', this).val(sum); 
    }); 
    } 

// On first load 
calculateSum(); 

// On change 
$("input").change(calculateSum); 

JSFiddle