Подтвердить что ты не робот

Почему .disableSelection() устарел?

.disableSelection в JQueryUI 1.9 устарел. Единственное объяснение, которое я могу найти, буквально "Отключение выбора текста плохое. Не используйте это." и "Мы не должны позволять разработчикам путаться с выбором текста. Это было изначально для плагинов взаимодействия, но все они обрабатывают правильный выбор текста в данный момент" .

Поскольку альтернативы нет, я предполагаю, что они означают, что это всегда плохо, но я не могу понять их причины. Двойной/тройной щелчок или бессмысленный выбор сложного приложения UI ненадлежащим образом применяет эффект выделения текста и (для меня) мгновенно устраняет иллюзию надежного пользовательского опыта.

Настольные приложения не страдают от этого! Кнопки и другие элементы управления в рабочей среде - это области пикселей, которые выглядят сплошными и действуют интуитивно независимо от того, что вы делаете с ними (иначе они сломаны). Тот факт, что веб-приложения состоят из сложных html-блоков, фонов, границ и изображений (веб-аналог пикселей), не является основанием для того, чтобы предать иллюзию, что элементы экрана, с которыми мы взаимодействуем, не являются атомарным, физическим объектом.

На изображении ниже, возможно, нужно выбрать часть текста, такую ​​как абзацы текста внутри панелей, которые могут быть данными приложения. Но для некоторых приложений было бы разумным выбором дизайна, чтобы другие части, такие как текст в кнопках, вкладках, заголовках аккордеона и тексте за модальными диалогами, не были бы выбраны. Это особенно относится к перетаскиваемым/сортируемым типам поведения.

jQuery UI Themeroller, with a region selected

1) Я неверно истолковал их решение? Является ли рекомендация более конкретной для JQuery, чем я понимаю?

2) Если в качестве общего утверждения подразумевается, что текст всегда можно выбрать таким образом, пожалуйста, предоставьте более полное объяснение причин.

3) Если бы я все-таки собирался это сделать, то какой самый эффективный, полный, уважительный, кросс-браузер и универсально доступен для этого сейчас, когда disableSelection устарел?

4b9b3361

Ответ 1

Вы можете использовать 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

Ответ 2

В реальном случае, когда полезно отключить выбор текста, это элемент <ul>, который <li> был запрограммирован на перетаскивание (для сортировки). Перемещение выполняется корректно, за исключением того, что текст выбирается во время перетаскивания пользователем. Разумеется, это законное использование для disableSelection().

Я знаю, что это можно сделать без этого метода (иначе это было бы невозможно для метода, чтобы это сделать в первую очередь); но причина, по которой я хотел использовать disableSelection(), заключается в том, чтобы кратко выразить мое желание в одном месте и иметь jQuery-UI для обработки моих проблем с совместимостью между браузерами, а не с использованием комбинации нескольких правил CSS и некоторых JS (для IE7).

Я считаю, что эта функция устарела, потому что кто-то был раздражен на веб-сайтах, которые запрещают выбор, и решил, что это не практика, которую они должны поощрять. Это аналогично веб-программисту, отказывающему в поддержке популярных браузеров, поскольку они не хотят поощрять их использование. Такой программист будет уволен, но вы можете уйти от наложения вашей философии на других, когда у вас есть власть над популярной библиотекой. Устранение этой функции приводит к тому, что программисты, которые хотят отключить выбор, тратят свое время на поиск альтернативного метода. Направляя злоумышленников, jQuery-UI предположительно заставит их изменить свои пути, и наше общество не будет затоплено веб-сайтами, которые запрещают выбор. Итак, вы видите, что есть прекрасная рационализация, и кто писал: "Отключение выбора текста плохо. Не используйте это". в официальной документации могут считать себя героическими. Мы здесь плохие парни.

Ответ 3

Как альтернатива методу CSS user-select: none;, я думаю, что просто предотвращение поведения по умолчанию при двойном щелчке и mousedown с помощью $(document).on('dblclick mousedown', '.prevent-select', false); имеет некоторые преимущества:

  • Все еще разрешает выбор текста, если пользователь хочет перетащить курсор вокруг элементов. Просто предотвращает раздражающий выбор текста, когда пользователь быстро щелкает.
  • Улучшенная поддержка браузера.
  • Не рекомендуется использовать команду jQuery (никаких злых взглядов при просмотре кода).

Ответ 4

Я не мог больше согласиться с @WesleyMurch, хочу, чтобы я мог дать вам больше + 1s:) Я также чувствую, что JS не должно быть направлением вперед, css может быть лучше для этого...,

Если вам нужен выбор для переключения (в некоторых случаях, если он динамический), вы можете использовать jquery для переключения между классами (старые браузеры IE), которые вы можете задать

Хорошо, это хороший способ (тонкий инструмент), чтобы препятствовать людям продолжать использовать OLD I.E. из-за вещей, которые они пропускают.

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

(Хотя IE 8/9 [от числа пользователей в% перспективы] - большое число, но зависит от того, насколько вы действительно заботитесь)

Я бы использовал параметр CSS, как объясняет @Shmiddty, но, возможно, включился, чтобы начать и отключить, когда вы идете вперед, но это только мое мнение:)