2009-08-23 3 views
39

У меня есть таблица, и я разрешаю пользователям выбирать несколько строк. Все это обрабатывается с помощью событий jQuery и некоторых CSS, чтобы визуально указать, что строка выбрана. Когда пользователь нажимает на сдвиг, можно выбрать несколько строк. Иногда это вызывает выделение текста. Есть ли все-таки предотвратить это?Предотвращение выделения текстовой таблицы

+0

Возможный дубликат [CSS-правило для отключения выделения текста] (http://stackoverflow.com/questions/826782/css-rule-to- disable-text-selection-highlight-highlighting) – Dan

ответ

71

Существует свойство CSS3 для этого.

#yourTable { 
    -webkit-touch-callout: none; 
    -webkit-user-select: none; 
    -khtml-user-select: none; 
    -moz-user-select: none; 
    -ms-user-select: none; 
    user-select: none; 
} 
+20

Слишком плохо обозреватель Internet Explorer. Протестировано в 6-8. –

+1

@NathanTaylor После поиска в Интернете вы найдете дубликат, где это уже разрешено: http://stackoverflow.com/questions/826782/css-rule-to-disable-text-selection-highlighting – Dan

+0

'Validation (CSS 3.0):" moz-none "не является допустимым значением для свойства« -moz-user-select ». И действительно, это не сработало для Firefox, пока я не изменил' moz-none' на 'none'. – Nolonar

1

Вы можете попробовать сфокусироваться() на выбранном тексте - выбор исчезает.

$('#someEl').focus(); 
30

Если вы хотите, чтобы иметь контроль, когда пользователи могут выбрать или не части вас на сайте, вы можете использовать этот little jQuery plugin.

jQuery.fn.extend({ 
     disableSelection : function() { 
       return this.each(function() { 
         this.onselectstart = function() { return false; }; 
         this.unselectable = "on"; 
         jQuery(this).css('user-select', 'none'); 
         jQuery(this).css('-o-user-select', 'none'); 
         jQuery(this).css('-moz-user-select', 'none'); 
         jQuery(this).css('-khtml-user-select', 'none'); 
         jQuery(this).css('-webkit-user-select', 'none'); 
       }); 
     } 
}); 

и использовать его как:

// disable selection on #theDiv object 
$('#theDiv').disableSelection(); 

В противном случае, вы можете просто использовать эти CSS атрибуты внутри вашего файла CSS, как:

#theDiv 
{ 
    -webkit-user-select: none; 
    -khtml-user-select: none; 
    -moz-user-select: none; 
    -ms-user-select: none; 
    user-select: none; 
} 
3

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

if (event.shiftKey) { 
    window.getSelection().removeAllRanges() 
} 
13

Только одна ноты на ответе от Клейтона выше - пример кода, кажется, работает хорошо, но для того, чтобы быть хорошим гражданином в мире Jquery, вы должны вернуть JQuery объект в конце функции, так что это цепной - простой однострочный дополнение устанавливает, что до:

jQuery.fn.extend({ 
    disableSelection : function() { 
      this.each(function() { 
        this.onselectstart = function() { return false; }; 
        this.unselectable = "on"; 
        jQuery(this).css('-moz-user-select', 'none'); 
      }); 
      return this; 
    } 
}); 

Приветствия, надеюсь, что это полезно.

+2

Он делает это с помощью «return this.each (function() {...» – frontendbeauty

1

Если у вас есть Jquery UI на ваших страницах, просто используйте

$("element-selector").disableSelection(); 
+1

Это недокументированное, но должно работать, если у вас есть ядро ​​jQuery UI –

+0

. Хорошая вещь об этом решении заключается в том, что он также применим к IE и реплицирует функциональность решения, которые уже упоминались, если вы посмотрите на код. – sksallaj

+1

Обратите внимание, что disableSelection() устарел в jQuery UI 1.9 – mar10

0
::-moz-selection { /* Code for Firefox */ 
    color: black; 
    background: none; 
} 

::selection { 
    color: black; 
    background: none; 
} 

от http://www.w3schools.com/cssref/sel_selection.asp
фактически из раздела примерки его, после изменения значения.
Обратите внимание, что курсор все еще «I» ...

+0

Примечание: Псевдоэлемент :: selection был создан для CSS Selectors Level 3, но удален до статуса рекомендации. момент, псевдоэлемент :: selection не входит ни в какую спецификацию (однако он может быть добавлен в будущие спецификации CSS). – luk2302

Смежные вопросы