Javascript 当我更改数字输入时,获取要更改的范围内容

Javascript 当我更改数字输入时,获取要更改的范围内容,javascript,Javascript,几天前,我有一个更复杂的表单在工作,但突然它停止了工作,我在保存版本方面一窍不通,所以我把它带回了基础,我无法让它工作。我做错了什么?我是否错误地使用了onInput <input type="text" id="number-of-copies-value" onInput="quote()" value="500"> <span id="total-cost-value">0.00</span> 您的HTML希望quote()函数在全球范围内可用。确保情

几天前,我有一个更复杂的表单在工作,但突然它停止了工作,我在保存版本方面一窍不通,所以我把它带回了基础,我无法让它工作。我做错了什么?我是否错误地使用了onInput

<input type="text" id="number-of-copies-value" onInput="quote()" value="500">
<span id="total-cost-value">0.00</span>

您的HTML希望
quote()
函数在全球范围内可用。确保情况确实如此

如果我将您的小提琴更改为在全局窗口对象上提供
quote()
,例如

window.quote = function quote() {
    // ...
};
小提琴又开始工作了

如果我用您的内容创建一个本地HTML文件,它会立即工作,这是有意义的,因为
quote()
是在全局范围内定义的


看起来JSFIDLE在一个函数作用域中执行JavaScript,这会中断您的
quote()
调用。

如果您关心浏览器兼容性,我建议使用onkeydown事件和setTimeout函数,如下所述

要在JSFIDLE中实现这一点,请将javascript设置中的javascript“load type”设置更改为“no wrap”选项之一

HTML

<input type="text" id="number-of-copies-value" onkeydown="window.setTimeout(function() { quote(); }, 1)" value="500">
<span id="total-cost-value">0.00</span>
我已经更新了你的JSFIDLE


有趣的是,这很有效,是吗?我发布的链接在chrome和firefox上对我都有效。当我说它不起作用时,你没有这个链接:@TimGreen fiddle的问题是javascript的加载位置——把它放在“头”和他的作品中——除了最初的引号();callyeah,在JSFIDLE javascript窗格中,单击javascirpt的设置(cog图标),并将“加载类型”更改为“不换行”选项之一,这样就可以了。
<input type="text" id="number-of-copies-value" onkeydown="window.setTimeout(function() { quote(); }, 1)" value="500">
<span id="total-cost-value">0.00</span>
function quote() {
    var totalcostvalue = document.getElementById("total-cost-value");
    var numberofcopiesvalue = document.getElementById("number-of-copies-value").value;
    var totalcost = (+numberofcopiesvalue);
    totalcostvalue.innerHTML = totalcost.toFixed(2);

}

quote();