【发布时间】:2014-12-13 06:00:57
【问题描述】:
可选文本框的我的王国
挑战:
创建一个 'any' 类型的跨浏览器文本框/输入字段,可以在点击/点击时选择其内容。
多年来一直没有解决的问题。
问题:
当使用触摸设备时,tap 事件会在鼠标使用 click 事件时触发。在 Apple 设备上,点击事件不会触发 onclick 或 onfocus。这不是 Safari 特定问题,因为 Google Chrome 在 Apple 设备上存在相同问题,但在 Android 设备上没有。苹果设备处理点击事件的方式明显不同。
选择文本的标准方法是简单地使用:
$('input').focus(function () {
$(this).select();
});
另一个关于堆栈溢出的选定解决方法是:
$('input').focus(function () {
this.select(); //no jquery wrapper
}).mouseup(function (e) {
e.preventDefault();
});
两者都可以很好地工作,但在苹果设备上都不能工作。
我发现的唯一可行的解决方案是根据post 创建一个选择范围。 这是纯 javascript,效果很好。
$('input').click(function () {
document.getElementById('ID').selectionStart = 0
document.getElementById('ID').selectionEnd = 999
});
主要解决方案
凭借所有这些知识,我在这里提出了我自己的组合解决方案。
$('.Select').focus(function () {
this.select();
this.setSelectionRange(0, 9999);
}).mouseup(function (e) {
e.preventDefault();
});
重温问题
这是一个长期存在的问题,我认为已经解决了,但现在我们到了 2016 年,问题像行尸走肉一样从地球上升起。
规范现在明确指出:
您不能在“HTMLInputElement”上使用“setSelectionRange”:输入元素的类型(“数字”)不支持选择。
所以主代码将不再适用于苹果设备的数字字段。
我们又来了,是时候让一些赏金猎人来处理这个案子了!
重要的附加信息:我讨厌苹果。
$('.Select').focus(function () {
this.select();
this.setSelectionRange(0, 9999);
}).mouseup(function (e) {
e.preventDefault();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Input type text
<br/><input type="text" value="click me" class="Select">
<br/>Input type number
<br/><input type="number" value="0" class="Select">
<br/>I dont like apples.
【问题讨论】:
-
对我来说,简单地使用
$('.element').on("click tap", function(){stuff here});总是有效的(在响应式网页设计和混合应用程序中)。请注意,使用“.on”允许您组合事件,其中诸如 .click 之类的东西将在某一时刻被弃用。 -- 如果这不起作用,总是可以选择使用.on("touchend")或touchstart。我希望这会有所帮助。
标签: javascript jquery html ios select