为什么.disableSelection()已弃用?

时间:2012-12-19 19:05:07

标签: jquery-ui textselection

不推荐在JQueryUI 1.9中使用.disableSelection。我能找到的唯一解释是,"Disabling text selection is bad. Don't use this.""We shouldn't allow developers to mess with text selection. This was originally for the interaction plugins, but they're all handling text selection properly on their own at this point."

由于没有其他建议,我认为它们意味着总是坏但我无法理解他们的理由。精心设计的UI应用程序的双击/三击或其他无意义选择不正确地应用了文本高亮效果,并且(对我而言)立即消除了强大用户体验的错觉。

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

在下图中,可以说某些文本应该是可选择的,例如面板中可能是应用程序数据的文本段落。但对于某些应用程序来说,合理的设计选择是其他部分,例如按钮,标签,手风琴标题中的文本和模态对话框后面的文本将无法选择。这尤其适用于可拖动/可排序的行为。

jQuery UI Themeroller, with a region selected

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

2)如果作为一般性声明,总是这样的文字可以像这样选择,请提供更全面的解释原因。

3)如果我打算这样做,那么现在不推荐使用disableSelection,那么性能最高,最完整,最尊重,跨浏览器以及普遍可访问的是什么?

4 个答案:

答案 0 :(得分:29)

您可以使用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

答案 1 :(得分:5)

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

我知道可以在没有这种方法的情况下完成(否则该方法首先不可能完成);但我想使用disableSelection()的原因是简单地在一个地方表达我的愿望并让jQuery-UI处理我的跨浏览器兼容性问题,而不是必须使用几个CSS规则和一些JS(用于IE7)的组合

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

答案 2 :(得分:0)

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

  1. 如果用户想要将光标拖动到元素,仍然允许文本选择。只需在用户快速点击时阻止恼人的文本选择。
  2. 更好的浏览器支持。
  3. jQuery团队没有弃用(代码审查中没有任何恶意。)

答案 3 :(得分:0)

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

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

这是一种阻止人们继续使用OLD的好方法(微妙的工具)。因为他们错过了一些东西。

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

(尽管IE 8/9 [来自%透视的用户数量]是一个很大的数字,但这取决于你真正关心的程度)

我会使用CSS选项,因为@Shmiddty解释但也许,启用时启用和禁用,但这只是我的意见:)