Javascript 当我更改数字输入时,获取要更改的范围内容
几天前,我有一个更复杂的表单在工作,但突然它停止了工作,我在保存版本方面一窍不通,所以我把它带回了基础,我无法让它工作。我做错了什么?我是否错误地使用了onInputJavascript 当我更改数字输入时,获取要更改的范围内容,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()函数在全球范围内可用。确保情
<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();