将addEventListener与对象文字一起使用

超级堆栈

我试图使用Douglas Crockford所描述的Good Parts编写JS,因此创建了一个全局对象A但是我在我的JS代码方面遇到了麻烦。变量value1value2正在评估NaN,我不明白为什么。

我已经在invoicedlastInvoiced外部声明了两个变量totalInvoiced然后尝试使用将它们放入方法中this但是,我不知道这是否正确?我这样做是希望可以addEventListener在这些变量上使用并调用该onchange事件。

为什么value1value2evalutaing来NaN

我该如何编写代码来在这两个变量的onchange事件上使用“ addEventListener”?

这是我所有代码的jsFiddle链接。

这是我的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");正在评估的字符串 invoiced1lastInvoiced-不变量-改变这种状况,那么:

parseFloat(invoiced1);
parseFloat(lastInvoiced);

其次,<input>您尝试从中获取值元素实际上没有设置任何值。

  <td><input type="number" id="invoiced" class="boxed" />&euro;</td>

在这里,&euro;是的值,而<td>不是<input>您应该给它一个初始值-NaN如果编写正确,则不需要在代码中进行测试,因此请删除该检查。


第三,如前所述,您是将事件设置为元素的值,而不是元素-尝试将事件设置为元素本身,然后使用A.invoiced.value;etc(使用A而不是thisasthis有时会在您的上下文中引用不同的对象,因为调用它的方式有所不同),而不是获取值,例如:

invoiced: document.getElementById("invoiced"),
lastInvoiced: document.getElementById("lastinvoiced"),
totalInvoiced: function () {
    var invoiced = A.invoiced.value;
    var lastInvoiced = A.lastInvoiced.value; 
    ...

这是一个更新的jsFiddle示例

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章