42

JQueryUI 1.9 中的 .disableSelection 已弃用。我能找到的唯一解释是,从字面上看,“禁用文本选择很糟糕。不要使用它。” “我们不应该让开发人员搞乱文本选择。这最初是针对交互插件的,但他们现在都在自己正确地处理文本选择。”

由于没有其他建议,我认为他们的意思是它总是很糟糕,但我无法理解他们的原因。双击/三次单击或以其他方式对精心设计的 UI 应用程序进行无意义的选择会不正确地应用文本突出显示效果,并且(对我而言)立即消除了强大用户体验的错觉。

桌面应用程序不会受此影响!桌面环境中的按钮和其他控件是像素区域,无论您对它们做什么(或者它们已损坏),它们看起来都是实心的并且可以直观地行动。Web 应用程序由复杂的 html 框、背景、边框和图像(像素的 Web 模拟)组成的事实没有理由背叛我们与之交互的屏幕元素不是原子的物理对象的错觉。

在下图中,可以说某些文本应该是可选择的,例如面板中可能是应用程序数据的文本段落。但对于某些应用程序,其他部分(例如按钮、选项卡、折叠式标题和模态对话框后面的文本)中的文本将是不可选的,这将是一个合理的设计选择。这尤其适用于可拖动/可排序的行为。

jQuery UI Themeroller,选择了一个区域

1)我是否误解了他们的决定?推荐是否比我意识到的更具体到 JQuery?

2) 如果作为一般性声明,文本应该始终可以像这样选择,请提供更完整的解释说明。

3) 如果我还是要这样做,那么在禁用 disableSelection 已弃用的情况下,什么是最高效、最完整、最受尊重、跨浏览器且普遍可访问的?

4

4 回答 4

31

您可以在大多数浏览器中使用 CSS 来完成此操作:http: //jsfiddle.net/fQthQ/

* {
   -ms-user-select: none; /* IE 10+ */
   -moz-user-select: -moz-none;
   -khtml-user-select: none;
   -webkit-user-select: none;
   user-select: none;
}

.selectable {
   -ms-user-select: auto;
   -moz-user-select: auto;
   -khtml-user-select: auto;
   -webkit-user-select: auto;
   user-select: auto;
}

Opera 目前不支持此功能。

有关更多信息,请参阅 MDN 页面:https ://developer.mozilla.org/en-US/docs/CSS/user-select

于 2012-12-19T19:15:07.933 回答
6

禁用文本选择很有用的实际案例是一个<ul>元素<li>被编程为可拖动(用于排序)。拖动工作正常,除了在用户拖动时选择了文本。当然,这是 disableSelection() 的合法用途。

我知道没有这种方法也可以做到(否则方法一开始就不可能做到);但我想使用 disableSelection() 的原因是在一个地方简洁地表达我的愿望并让 jQuery-UI 处理我的跨浏览器兼容性问题,而不是必须使用几个 CSS 规则和一些 JS 的组合(对于 IE7) .

我相信此功能已被弃用,因为有人对禁用选择的网站感到恼火,并认为这不是他们应该鼓励的做法。这类似于网络程序员拒绝支持流行的旧版浏览器,因为他们不想鼓励使用它们。这样的程序员会被解雇,但是当你对一个流行的库拥有权力时,你可以侥幸把你的哲学强加给别人。弃用此功能会使想要禁用选择的程序员浪费时间寻找替代方法。通过惩罚作恶者,jQuery-UI 可能会让他们改变自己的方式,我们的社会也不会被禁用选择的网站所淹没。所以你看,有一个非常好的合理化,谁写了“禁用文本选择是不好的。不要”

于 2013-07-30T15:26:53.420 回答
0

作为 CSSuser-select: none;技术的替代方案,我认为简单地防止双击和 mousedown 的默认行为$(document).on('dblclick mousedown', '.prevent-select', false);具有一些优点:

  1. 如果用户想要在元素周围拖动光标,仍然允许文本选择。只是防止用户快速点击时烦人的文本选择。
  2. 更好的浏览器支持。
  3. jQuery 团队未弃用(代码审查中没有邪恶的目光。)
于 2013-05-16T21:26:48.890 回答
0

我完全同意@WesleyMurch,希望我能给你更多的+1 :) 我也觉得,JS 不应该是前进的方向,css 可能会更好......,

如果您需要选择切换(在某些情况下如果是动态的),您可以使用 jquery 在类之间切换,(旧的 IE 浏览器)您可能会问???

嗯,这是一个很好的方法(微妙的工具),可以阻止人们因为他们错过的东西而继续使用 OLD IE。

http://caniuse.com/#search=user-select

(虽然 IE 8/9 [从用户数量的百分比来看] 是一个很大的数字,但这取决于你真正关心的程度)

正如@Shmiddty 解释的那样,我会使用 CSS 选项,但也许可以在您继续使用时启用和禁用,但这只是我的意见:)

于 2013-08-02T14:42:10.207 回答