我试图使用Douglas Crockford所描述的Good Parts编写JS,因此创建了一个全局对象A
。但是我在我的JS代码方面遇到了麻烦。变量value1
和value2
正在评估NaN
,我不明白为什么。
我已经在invoiced
和lastInvoiced
外部声明了两个变量,totalInvoiced
然后尝试使用将它们放入方法中this
。但是,我不知道这是否正确?我这样做是希望可以addEventListener
在这些变量上使用并调用该onchange
事件。
为什么value1
和value2
evalutaing来NaN
?
我该如何编写代码来在这两个变量的onchange事件上使用“ addEventListener”?
这是我的JS代码:
var A = {
invoiced: document.getElementById("invoiced").value,
lastInvoiced: document.getElementById("lastinvoiced").value,
totalInvoiced: function () {
var invoiced1 = this.invoiced;
var lastInvoiced1 = this.lastInvoiced;
var value1 = parseFloat("invoiced1");
var value2 = parseFloat("lastInvoiced1");
if(isNaN(value1))
value1 = 0;
if(isNaN(value2))
value2 = 0;
var totalInvoiced1 = value1 + value2;
var value3 = document.getElementById("daytotal").value = totalInvoiced1 + "€";
return value3;
}
};
window.onload = A.totalInvoiced();
A.invoiced.addEventListener("change", A.totalInvoiced, false);
A.lastInvoiced.addEventListener("change", A.totalInvoiced, false);
首先,parseFloat("invoiced1");
与parseFloat("lastInvoiced");
正在评估的字符串 invoiced1
,lastInvoiced
-不变量-改变这种状况,那么:
parseFloat(invoiced1);
parseFloat(lastInvoiced);
其次,<input>
您尝试从中获取值的元素实际上没有设置任何值。
<td><input type="number" id="invoiced" class="boxed" />€</td>
在这里,€
是的值,而<td>
不是<input>
。您应该给它一个初始值-NaN
如果编写正确,则不需要在代码中进行测试,因此请删除该检查。
第三,如前所述,您是将事件设置为元素的值,而不是元素-尝试将事件设置为元素本身,然后使用A.invoiced.value;
etc(使用A
而不是this
asthis
有时会在您的上下文中引用不同的对象,因为调用它的方式有所不同),而不是获取值,例如:
invoiced: document.getElementById("invoiced"),
lastInvoiced: document.getElementById("lastinvoiced"),
totalInvoiced: function () {
var invoiced = A.invoiced.value;
var lastInvoiced = A.lastInvoiced.value;
...
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句