2014-10-01 83 views
0

我使用Coldfusion即时创建以下表单。不同的输入在加载时都有不同的值,但共享相同的类。使用另一个输入框动态地将文本字段的值与相同类的值相乘

我将有一个唯一的标识符另一个输入字段 - #permup

的形式如下(剥离表单标签):

<table width="100%" border="0" cellpadding="0" cellspacing="0" id="county-table" style="margin-top: 15px;"> 

<tr> 
<TD>Length</TD> 
<TD align="center">PerM</TD> 
</tr> 

<tr bgcolor="#ffffff"> 

<TD>from 1-10m</TD> 
<TD align="center"><input class="perm" type="text" name="PerM1" value="1.60" size="6" /></TD> 

</tr> 



<tr bgcolor="#efefef"> 

<TD>from 11-20m</TD> 
<TD align="center"><input class="perm" type="text" name="PerM2" value="1.10" size="6" /></TD> 

</tr> 



<tr bgcolor="#ffffff"> 

<TD>from 21-50m</TD> 
<TD align="center"><input class="perm" type="text" name="PerM3" value="1.50" size="6" /></TD> 

</tr> 



<tr bgcolor="#efefef"> 

<TD>from 51-80m</TD> 
<TD align="center"><input class="perm" type="text" name="PerM4" value="1.55" size="6" /></TD> 


</tr> 



<tr bgcolor="#ffffff"> 

<TD>from 81-150m</TD> 
<TD align="center"><input class="perm" type="text" name="PerM5" value="1.10" size="6" /></TD> 


</tr> 



<tr bgcolor="#efefef"> 

<TD>from 151-200m</TD> 
<TD align="center"><input class="perm" type="text" name="PerM6" value="1.10" size="6" /></TD> 


</tr> 



<tr> 

<td>&nbsp;</td> 
<td><input id="permup" type="text" name="permup" value="0" size="6" /></td> 

</tr> 

</table> 

我需要的是,当有人类型的基率在#permup字段中增加,类.perm的字段的所有值都增加了该量,并且如果有人随后将#permup字段设置为0(零),那么带有.perm的字段将恢复为其原始值。

这必须在类名上使用JQuery,因为表行可以​​是任意数字。我有以下脚本:

<script language="JavaScript" type="text/javascript"> 

$('#permup').keyup(function() { 

    $('.perm').each(function(){ 

     var defaultValue = $(this).val(); 

     $(this).val($('#permup').val() * defaultValue); 

    }); 

}); 

</script> 

这样的工作,但每次设定值在.perm领域相同,也不会在现场#perm被点击的或设置为零怪异的东西。

我希望有人能帮助!

非常感谢

JS

+0

确保您确保在尝试做数学练习之前确实拥有数字。 – 2014-10-01 12:27:24

+0

我没有看到您定义默认值的地方。这可能是问题。 – MrJman006 2014-10-01 13:00:31

回答

-2

尝试使用parseFloat(),并使用keyupfocus事件,如下所示: -

$('#permup').on('keyup focus', function() { 
    $('.perm').each(function(){ 
     var defaultval = $('#permup').val(); 
     var myValue; 
     if(defaultval == "0"){ 
     myValue = $(this).attr('value') 
     } 
     else{ 
     myValue = parseFloat(parseFloat($(this).attr('value')) * parseFloat(defaultval)) || $(this).attr('value') 
     } 
     $(this).val(myValue); 
    }); 
}); 

DEMO

侧面说明: -始终尝试使用parseInt()parseFloat()同时在处理数字javascript/jquery否则数字也被视为字符串

+0

parseInt(“25A7”)返回什么? – 2014-10-01 12:39:33

+0

感谢您的时间来看看这个!很抱歉,对于迟到的回复,但由于某种原因没有得到通知!这几乎可行 - 但是,当我在#permup字段中输入2时,它的确如其所示,但是如果我删除2并决定我需要它们全部乘以4,则新计算是4 *输入时到达的值2!我的意思是,如果一个字段的初始值为10,我在#permup中输入2,值为20(全部为好),但是如果我决定实际增加4,则值为80,不是40(4 *盒的原始值)。那有意义吗?谢谢 – 2014-10-02 11:44:02

+0

减号1. 返回你好123 123好。与@Kartikeya不同,我实际测试了它。 – 2014-10-02 12:09:53

0

正如其他人所说,你需要确保你正在用数字做数学计算,而不是.value属性给出的默认“值”。另外,当您修改该值时,如果遇到有关如何检索旧值的问题,则不建议将值存储在您的显示器中。下面是代码,它可以做你想做的事情并跟踪原始值。

<script language="JavaScript" type="text/javascript"> 


    // Store default values 
    var perm_items = document.getElementsByClassName("perm"); 
    var orig_perm_values = new Array(perm_items.length); 

    for (var i = perm_items.length - 1; i >= 0; i--) 
    { 
    orig_perm_values[i] = perm_items[i].value; 

    document.getElementById('out').innerHTML = orig_perm_values[i]; 
    } 


    function updateValues(event) 
    { 
    for (var i = perm_items.length - 1; i >= 0; i--) 
    { 
     perm_items[i].value = (parseFloat(orig_perm_values[i]) + parseFloat(event.target.value)).toFixed(2); 
    } 
    } 

    </script> 
相关问题