Javascript 将两个变量相除会得到NaN

Javascript 将两个变量相除会得到NaN,javascript,Javascript,我正在学习javascript。我当前的代码似乎对总价值起作用,但我无法让我的部门代码起作用,以显示它的人均成本 这一行似乎是问题所在: document.getElementById(“costeach”).innerHTML='英镑'+price_ 它在控制台中返回NaN,但没有错误 var a=document.getElementById(“数量”); var price=a.options[a.selectedIndex].值; var b=document.getElementBy

我正在学习javascript。我当前的代码似乎对总价值起作用,但我无法让我的部门代码起作用,以显示它的人均成本

这一行似乎是问题所在: document.getElementById(“costeach”).innerHTML='英镑'+price_

它在控制台中返回NaN,但没有错误

var a=document.getElementById(“数量”);
var price=a.options[a.selectedIndex].值;
var b=document.getElementById(“方法”);
var type=b.options[b.selectedIndex]。值;
如果(类型==‘信用’){
var价格=价格*1.034;
}
var价格_各=(价格/a);
document.getElementById(“成本”).innerHTML=“英镑”+价格;
document.getElementById(“costeach”).innerHTML='英镑'+price_
.container{
显示:内联块;
位置:相对位置;
宽度:200px;
}
.形象{
显示:块;
宽度:100%;
高度:自动;
不透明度:0.6;
}
.覆盖{
位置:绝对位置;
排名:0;
底部:0;
左:0;
右:0;
身高:100%;
宽度:100%;
不透明度:0;
过渡:放松;
}
.容器.覆盖层{
不透明度:1;
}
钮扣{
填充:10px 15px;
光标:指针;
}
.文本{
颜色:黑色;
字体系列:arial;
字体大小:50px;
字体大小:粗体;
位置:绝对位置;
最高:50%;
左:50%;
转换:翻译(-50%,-50%);
-ms转换:翻译(-50%,-50%);
文本对齐:居中;
}
跨度{
显示:块;
字体大小:12px;
}

预订表
两个人
三个人
4个人
5个人
6人

贝宝融资方式
银行转账 借记卡 信用卡(+3.4%)

总价 你好,世界! 每个价格 你好,世界! 书
您正在通过DOM元素跳转字符串:

var a = document.getElementById("quantity");

// ...

var price_each = (price / a);
虽然字符串可以自动转换为数字,但DOM元素不能。有关详细信息,请参见@Timo

您需要更改:

var-price\u each=(价格/a)
var价格_each=(价格/(a.selectedIndex+1))


但我强烈建议不要这样做,最好是创建一个javascript对象,其中包含人员编号和成本,并从中获取值

我已经检查了您的JSFIDLE,问题是您用作数量的值是字符串

<select id="quantity" name=''>
  <option title='Option 2' value='240'>2 </option>
  <option title='Option 3' value='330'>3 </option>
  <option title='Option 4' value='400'>4 </option>
  <option title='Option 3' value='500'>5 </option>
  <option title='Option 4' value='600'>6 </option>
</select>

正如在其他答案中正确指出的那样,错误的原因是您试图将一个数字除以一个DOM元素

如果我理解正确的话,你是想把价格除以人数。为了实现这一点,您需要指定某处的人数。当然,您可以从
选项的文本中提取此数字,或从其索引中派生此数字,但更简洁的方法是在
数据
属性中定义此数据,例如

<option title='Option 2' value='240' data-num-persons='2'>2 people</option>
<option title='Option 3' value='330' data-num-persons='3'>3 people</option>
<option title='Option 4' value='400' data-num-persons='4'>4 people</option>
代码的其余部分保持不变。


使用这种方法,您不需要使选项的文本或标题机器可读,实际数据(人数)将保持独立于表示。例如,如果您将文本更改为“一人”、“两人”等,代码仍然有效

从HTML获取的所有值都是字符串。字符串不是数字。您必须先测试这些值,然后再将它们转换为数字,然后再进行数学运算。@ScottMarcus字符串在您对其使用算术运算符时会自动转换为数字。@ScottMarcus Try
“1”/“2”
您希望
price/a
做什么<代码>a
不是一个数字。我怀疑您使用了错误的变量。@ScottMarcus因为他的值都不是空字符串,所以场景不相关。问题与字符串值无关,而是他被一些根本不是字符串或数字的东西除掉了。@AlexShesterov我没有投反对票,但可能是因为它没有说明如何解决问题。所以这可能只是一个评论。@Barmar,谢谢你的洞察力。。。我仍然认为这不足以成为否决票的动机,因为这个答案在技术上是正确的——但这只是我个人的观点。这就提出了一个问题:为什么他需要不同属性的价格和人数。只需输入
value=“120”
就不需要除法了。没错,但我相信他需要总价和人均价格,所以不是除法就是乘法,就是两个“预先计算”的价格。。。我认为两个价格是最好的选择,但我不想建议太多的重构。
<option title='Option 2' value='240' data-num-persons='2'>2 people</option>
<option title='Option 3' value='330' data-num-persons='3'>3 people</option>
<option title='Option 4' value='400' data-num-persons='4'>4 people</option>
var number_of_people = a.options[a.selectedIndex].getAttribute('data-num-persons');
var price_each = (price / number_of_people);