【问题标题】:Which event type should I use with inputs of type 'range'?我应该将哪种事件类型与“范围”类型的输入一起使用?
【发布时间】:2014-12-29 06:37:28
【问题描述】:

我有一个包含多个“范围”类型的输入的表单,并且它有一个隐藏的提交按钮,直到每个范围输入触发一个事件。我很好奇为此目的选择哪种类型的事件。

如果使用“点击”事件,一些较旧的浏览器(即 Windows 的 Safari)不会总是注册事件。使用“mouseup”可能不是一个好主意,因为在旧版浏览器或某些移动浏览器上,范围输入将改为作为常规输入框生成。执行以下操作,根本不会触发在 Android 上运行的 Opera 浏览器上的事件(在该浏览器上,范围输入呈现为常规文本输入框):

$('#my_form input').on("mouseup change", function(){ ... }

所以我的问题是,我应该选择哪种事件类型才能在旧版、移动和现代浏览器上运行良好,并且可以避免上面列出的问题?

【问题讨论】:

  • 收听change事件怎么样?

标签: javascript jquery


【解决方案1】:

显然 Chrome 和 Safari 是错误的:onchange 应该只在用户释放鼠标时触发。要获得持续更新,您应该使用 oninput 事件,该事件将在 Firefox、Safari 和 Chrome 中通过鼠标和键盘捕获实时更新。

但是,IE10 不支持 oninput,所以最好的办法是结合两个事件处理程序,如下所示:

<span id="valBox"></span>
<input type="range" min="5" max="10" step="1" 
   oninput="showVal(this.value)" onchange="showVal(this.value)">

查看此Bugzilla thread 了解更多信息。

【讨论】:

  • 谢谢。您的建议似乎适用于 Safari,但对 Android 上的 Opera 没有任何作用。如果你想查看一个测试页面,这里有一个例子:goo.gl/KKpzLk
  • 我在 Opera 11.10 Mini for Android 上进行了测试,它运行良好。您正在测试的浏览器版本是什么?
  • 使用 Android Opera 18.0(完整版,不是迷你版)进行测试。似乎也不适用于 Opera Mini 7.5。
  • 不过,基于 Bugzilla 线程,您的答案似乎应该是正确的。也许我的代码或手机上的浏览器中存在某些问题导致了问题。我会将您的回复标记为正确的回复,并查看是否存在导致我的问题的特殊情况。谢谢!
【解决方案2】:

你可以使用change事件:

$('#my_form input').on("change", function(){ ... }

或:

$('#my_form input').change(function(){ ... }

即使浏览器将范围输入呈现为常规文本输入,这也会起作用。

【讨论】:

  • 谢谢 - 试过了,但它在 Windows Safari 上很不稳定,在 Android Opera 上没有任何作用。
  • 如果有问题,也许你在一些最旧的版本上运行。你有最新版本的 jQuery 吗?
猜你喜欢
  • 2012-08-24
  • 2017-06-10
  • 2021-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-18
  • 1970-01-01
  • 2012-05-28
相关资源
最近更新 更多