【问题标题】:javascript weird errorjavascript奇怪的错误
【发布时间】:2012-12-03 03:28:58
【问题描述】:

我遇到了一个奇怪的问题!

我有这个代码:

<script>
  window.PRICES = {
    'Gold' : { 10: 299, 20: 400, 100: 1745, },
    'Coins': { 10: 300, 40: 355, 1000: 30000, },
  };
</script>
<script>
function pick(i,n) {
  document.getElementById("Item").innerHTML = i+" "+n;
  document.getElementById("Price").innerHTML = (window.PRICES)[i][n];
}
</script>

函数pick被select的onchange事件调用:

<select name="Gold" onchange="pick(this.value,this.name)">
  <option value="10">10 Gold</option>
  <option value="20">20 Gold</option>
  <option value="100">100 Gold</option>
</select>

但是当我更改值时,我得到“未捕获的类型错误:无法读取未定义的属性 'Gold'” 但是window.PRICES 不是未定义的! 怎么了?

PS:我可以使用 GC 控制台调用pick('Gold','10')!!!

【问题讨论】:

  • 在您的事件处理程序中添加一个console.log(i, n) 并验证这些值是否真的是您想要的。
  • 参数顺序错误,改为pick(this.name, this.value)
  • 为了不混淆这些东西,请在函数中为您的参数提供正确的名称,将其设为 function pick(name, value) {}

标签: javascript javascript-events


【解决方案1】:

onchange 处理程序的参数顺序被切换。它应该是pick(this.name, this.value),因为您正在通过name 访问PRICES 对象first,并且只有value 访问then,就像在您的示例中@ 987654326@.

【讨论】:

  • @user1663047 :我建议您也将function pick(i,n) 更改为function pick(productType,amount),这样您就不必记住/猜测哪个是哪个。
猜你喜欢
  • 2014-03-14
  • 2012-07-23
  • 2011-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-20
  • 2013-08-30
相关资源
最近更新 更多