2014-08-27 77 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