0

以下脚本可以正常工作,尽管我需要做一些修改。在每个函数中,我都得到了不同公式所需的值。但是,我倾向于在不同的函数中复制同一行代码。

前任。

function one(){ var v1= document.getElementById('one').value; }
function two(){ var v1= document.getElementById('one').value; }

完整代码

我想一次性声明所有变量,而不是只使用特定函数所需的变量。如果我将它们声明在顶部,而不是在它们被调用后它们仍然保持原始值,因此如果当然更改,我需要将该值更新为当前值。

4

3 回答 3

3

如果您像在小提琴中那样做,您的代码将很难阅读。

而是做

var myVars;
window.onload=function() {
  myVars = { 
    'list_price': document.getElementById('list_price'),
    'negotiated': document.getElementById('negotiated'),
    .
    .
    'lease_payment': document.getElementById('lease_payment')
  }

现在你可以做

var price = myVars.list_price.value;

或者添加一个功能

function getVal(id) {
  var val = document.getElementById(id).value;
  if (val =="" || isNaN(val)) return 0;
  return parsetInt(val,10); 
}

现在你可以做

var price = getVal("list_price");
于 2013-11-08T13:12:31.613 回答
1

有两种方法可以解决这个问题:

  1. 当值改变时更新你的变量
  2. 使用始终返回正确值的函数

change1)您可以为事件或keyup更改全局变量的事件添加侦听器:

// save initial value
var val = document.getElementById('one').value;

// update the value when input is changed
addEventListener(document.getElementById('one'), 'change', function() {
  val = document.getElementById('one').value;
});

console.log(val);

2)您可以使用始终返回当前值的函数:

var val = function() { return document.getElementById('one').value; };

console.log(val());

2b)如果你讨厌括号,你可以定义一个使用上面的函数作为getter的属性:

Object.defineProperty(window, 'one', {
  get : function() { return document.getElementById('one').value; }
});

console.log(one);
于 2013-11-08T13:12:32.677 回答
1

mplungjan 的解决方案很棒。如果您完全担心全局变量泄漏到窗口范围内,请将代码包装在立即调用函数表达式中以防止这种情况发生:

(function(){
  // code goes here
}());
于 2013-11-08T13:19:20.443 回答