优化我的Javascript百分比计算器
我有一个javascript,它从两个字段(零售和网络)计算百分比,然后将该百分比转储到另一个字段(标记) 由于我对JS的世界比较陌生,我最终将代码重用到了几行字段中。这违反了DRY和KISS原则,所以我想知道您是否可以给我一些关于如何优化代码的输入,以便它可以处理任意两个字段,然后将值转储到第三个字段 这是我的表单段使用它的截图 这是我正在使用的代码,我必须重复使用它四次,并将代码放在四个函数中,例如(percentage1、percentage2、percentage3、percentage4)。这些函数中的每一个都处理屏幕截图中显示的一行字段优化我的Javascript百分比计算器,javascript,forms,Javascript,Forms,我有一个javascript,它从两个字段(零售和网络)计算百分比,然后将该百分比转储到另一个字段(标记) 由于我对JS的世界比较陌生,我最终将代码重用到了几行字段中。这违反了DRY和KISS原则,所以我想知道您是否可以给我一些关于如何优化代码的输入,以便它可以处理任意两个字段,然后将值转储到第三个字段 这是我的表单段使用它的截图 这是我正在使用的代码,我必须重复使用它四次,并将代码放在四个函数中,例如(percentage1、percentage2、percentage3、percenta
function percentage1()
{
//the dividee
x = document.getElementById('tariff_data');
//the divider
y = document.getElementById('network_data');
//if the first value is lower than the second, append a "-" sign
if (x.value < y.value)
{
z = "-"+(x.value/y.value)*100;
document.getElementById('markup_data').value = z;
}
//not a negative percentage
else
{
z = (x.value/y.value)*100;
document.getElementById('markup_data').value = z;
}
}
function percentage2()
{
//the dividee
x = document.getElementById('tariff_rental');
//the divider
y = document.getElementById('network_rental');
//if the first value is lower than the second, append a "-" sign
if (x.value < y.value)
{
z = "-"+(x.value/y.value)*100;
document.getElementById('markup_rental').value = z;
}
//not a negative percentage
else
{
z = (x.value/y.value)*100;
document.getElementById('markup_data').value = z;
}
}
etc etc....
函数百分比1()
{
//分割人
x=document.getElementById(“关税数据”);
//分隔器
y=document.getElementById('network_data');
//如果第一个值小于第二个值,请附加“-”号
如果(x值
使用onchange HTML属性调用这些函数
另外,当我除以一个十进制数时,它给出了错误的值,有没有办法让它计算出一个十进制数的正确百分比
我的代码也给出了这些奇怪的输出:
南,无限
感谢您而不是优化,让我们先关注正确性=) 请注意,属性的类型为“string”,因此算术运算符正在执行隐式类型转换,这意味着您可能经常执行字符串串联,而不是预期的数字操作 我强烈建议将它们显式转换为first并检查无效输入,另外,不要忘记首先使用
var
声明变量,这样它们就不会潜在地破坏全局变量,例如:
var x = Number(document.getElementById('tariff_data'));
var y = Number(document.getElementById('network_data'));
if (!isFinite(x) || !isFinite(y)) {
// Handle non-numerical input...
}
如果您愿意,也可以使用该功能,例如:
var x = parseFloat(document.getElementById('tariff_data'), 10);
我强烈建议您对JavaScript语言进行一些正式的学习;它充满了陷阱,但如果你坚持下去,你可以省去很多麻烦和头痛。与其优化,不如先关注正确性=) 请注意,属性的类型为“string”,因此算术运算符正在执行隐式类型转换,这意味着您可能经常执行字符串串联,而不是预期的数字操作 我强烈建议将它们显式转换为first并检查无效输入,另外,不要忘记首先使用
var
声明变量,这样它们就不会潜在地破坏全局变量,例如:
var x = Number(document.getElementById('tariff_data'));
var y = Number(document.getElementById('network_data'));
if (!isFinite(x) || !isFinite(y)) {
// Handle non-numerical input...
}
如果您愿意,也可以使用该功能,例如:
var x = parseFloat(document.getElementById('tariff_data'), 10);
我强烈建议您对JavaScript语言进行一些正式的学习;它充满了陷阱,但如果你坚持下去,你可以省去很多麻烦和头痛。关于干涸你的代码;记住,你可以:
- 将参数传递给函数并在函数中使用这些参数
- 使用Return关键字返回值
// We're assuming 'dividee' and 'divider' are numbers.
function calculatePercentage(dividee, divider) {
var result;
// Regardless of the positive/negative result of the calculation,
// get the positive result using Math.abs().
result = Math.abs((dividee.value / divider.value) * 100);
// If the result was going to be negative...
if (dividee.value < divider.value) {
// Convert our result to negative.
result = result * -1;
}
// Return our result.
return result;
}
显然,您可以更进一步,创建一个函数,该函数接受ID,从元素中提取值,等等,但是您应该尝试根据这些技巧自己构建这个函数
Maerics也提出了一个你应该注意的非常好的观点;进一步了解JavaScript的优点。DouglasCrockford的书非常优秀,所有JS开发人员都应该阅读和理解,IMHO
希望这能帮助您清理代码 关于烘干代码;记住,你可以:
- 将参数传递给函数并在函数中使用这些参数
- 使用Return关键字返回值
// We're assuming 'dividee' and 'divider' are numbers.
function calculatePercentage(dividee, divider) {
var result;
// Regardless of the positive/negative result of the calculation,
// get the positive result using Math.abs().
result = Math.abs((dividee.value / divider.value) * 100);
// If the result was going to be negative...
if (dividee.value < divider.value) {
// Convert our result to negative.
result = result * -1;
}
// Return our result.
return result;
}
显然,您可以更进一步,创建一个函数,该函数接受ID,从元素中提取值,等等,但是您应该尝试根据这些技巧自己构建这个函数
Maerics也提出了一个你应该注意的非常好的观点;进一步了解JavaScript的优点。DouglasCrockford的书非常优秀,所有JS开发人员都应该阅读和理解,IMHO
希望这能帮助您清理代码 Tha