【问题标题】:How to focus on a range slider using Javascript?如何使用 Javascript 关注范围滑块?
【发布时间】:2019-04-19 19:18:38
【问题描述】:

我希望能够专注于“range”类型的输入元素,换句话说,默认滑块,这样就可以在用户不实际点击的情况下拖动滑块它。

显而易见的解决方案是只使用sliderelement.focus()。 然而这不起作用。
我发现here 的原因是我必须在滑块的句柄上调用这个方法。
滑块句柄的类应该是'ui-slider-handle'。

但由于某种原因document.querySelector('.ui-slider-handle')返回null
奇怪的是,当我使用$('.ui-slider-handle') 时,这确实适用于 JQuery

我做了this fiddle 来澄清我的问题。我想只使用 Javascript 来解决这个问题。

--- 编辑 ---
也许我的解释不够清楚。 ui-slider-handle 类不是我添加到滑块句柄的自定义类,因为我无法访问句柄。根据我找到的答案(我之前说过),我希望这将是默认类。

【问题讨论】:

  • jQuery 有什么问题?
  • 这没什么问题,但我想用纯Javascript制作我的项目。即使我决定使用它,我仍然想知道为什么会出现这个问题。

标签: javascript jquery html rangeslider


【解决方案1】:

在您的小提琴中,querySelector 是正确的。

尽管如此,您的 jQuery 将始终返回 true。

例如,将 var handle2 = document.querySelector('.ui-slider-handle'); 更改为 var handle2 = document.querySelector('.ui-slider-handlesdfsdfsdfsdf'); 这样的组合类,它会返回 true。

如果要检查元素是否存在,可以使用 .length。

所以只需将 .length 添加到您的选择器中,它们都会返回 false。

var handle1 = $('.ui-slider-handle').length;
var handle2 = document.querySelector('.ui-slider-handle');

$('#1').html('JQuery, handle found: ' + (handle1 ? 'true' : 'false'))
$('#2').html('Javascript, handle found: ' + (handle2 ? 'true' : 'false'))

要将焦点放在范围元素上,只需使用.focus()

这是一个例子。使用按钮和箭头键来查看它正在获得/失去对元素的关注。

function getFocus() {
  document.getElementById("myRange").focus();
}

function loseFocus() {
  document.getElementById("myRange").blur();
}
<input type="range" id="myRange" value="50">

<p>Click the buttons below to give focus and/or remove focus from the slider control.</p>

<button type="button" onclick="getFocus()">Get focus</button>
<button type="button" onclick="loseFocus()">Lose focus</button>

【讨论】:

  • 感谢您指出这一点,我的错。那么如果是这样的话,我想没有办法选择滑块的手柄元素?
  • document.querySelector('.ui-slider-handle').focus() 应该可以工作
  • 这实际上是个问题。我也这么认为,但不幸的是,由于 document.querySelector('.ui-slider-handle') 返回 null,它会抛出错误。
  • 为了澄清我的问题具有误导性:'.ui-slider-handle' 不是定制类。这是我根据我在 SO 上找到的其他答案尝试的方法(这似乎不起作用)。我会更新我的问题。
  • 我有点困惑,但我做了一个工作示例,向您展示关注范围输入是多么简单。
猜你喜欢
  • 2010-10-27
  • 1970-01-01
  • 1970-01-01
  • 2015-04-15
  • 2018-12-23
  • 2017-05-18
  • 1970-01-01
  • 1970-01-01
  • 2020-08-21
相关资源
最近更新 更多