javascript - 在javascript中设置输入元素的初始值不会传播到输出元素
问题描述
我有以下 HTML:
var mySlider = document.getElementById("mySlider");
var stored = localStorage.getItem("myData");
if (stored == null)
mySlider.value = 5;
else
mySlider.value = stored;
mySlider.addEventListener("change", () => {
localStorage.setItem("myData", mySlider.value);
});
<form oninput="myNumber.value=mySlider.value">
<input type="range" id="mySlider" min="0" max="10" />
<output for="mySlider" id="myNumber">default</output>
</form>
数据进出存储和范围滑块的所有获取和设置似乎都工作正常;滑块加载到我之前设置的任何值。但是输出myNumber
似乎只响应滑块的手动移动;它在初始化时显示其原始值“默认”而不是输入滑块的值,直到我实际开始移动滑块。
我知道我可以在设置滑块的值时继续设置输出的值,但这似乎违背了首先拥有输出元素的目的。输出是否不应该在更改时显示输入的结果,无论该更改来自javascript还是用户交互?我如何让它以这种方式表现?
解决方案
输出标签没有什么特别之处,它是表单的 oninput 执行实际设置,我已经测试过(您也可以测试)表单的 oninput 事件似乎没有在简单设置值时被调用手动输入(意思是,使用 javascript)。
如果您不想从字面上设置输出元素的值,则可以在更改任何元素的值之后立即调度表单的“输入”事件。假设您的表单的 id 为“u”,那么在设置子元素的值之后,只需调用:(全部一起):
mySlider.value=5; u.dispatchEvent(新事件(“输入”))
推荐阅读
- c# - 从次要派生函数访问基类函数
- javascript - 如何将 span 标签中的数据动态添加到 href 标签中
- python - Keras 数据集对于训练集和测试集具有不同的向量长度
- python - Python3 在 Mac 上运行但没有 Pip3?
- c# - C# 对许多不同的方法只使用几个按钮?
- lua - 口袋妖怪红蓝混沌版
- rest - Microsoft Graph 请求 BadRequest
- c++ - 在分配指向数组内存地址的指针时,为什么不用地址运算符呢?
- docker - artifactory_extra_conf 在 6.1.0 中不可用
- c# - C# 访问从 [from body] x-www-form-urlencoded 接收的混合内容