Любой способ предотвратить "выделение" выделенного текста? - PullRequest
8 голосов
/ 28 января 2009

Выделите текст на этой веб-странице, затем щелкните в любом месте документа. Ваш выбор исчезнет.

Есть ли способ предотвратить такое поведение, когда пользователь нажимает на определенный элемент, с помощью CSS или Javascript?

например:.

var element = document.getElementById("foo");
foo.onclick = function(e){
   //some magic here that prevents deselection from occuring
}

или

foo.style.preventDeselect = "true";

Редактировать: Возможно, я смогу сохранить выделение, затем после «щелчка мышью» восстановить выделение? Есть ли способ сохранить выбор, а затем повторно выбрать it?

Спасибо!

Ответы [ 6 ]

3 голосов
/ 28 января 2009

«return false», а также «e.preventDefault ()» в onmousedown работает в FF и Safari, но не в IE. Насколько я могу судить, единственное решение для IE - выдать ошибку.

Это работает во всех браузерах (но вызывает ошибку в IE, так как предотвращение не является методом):

//clicking the 'test' element will not deselect text.
var test = document.getElementById("test");
test.onmousedown = function(e){
  e = e || window.event;
  e.preventDefault();
}

Я все еще хотел бы сделать это без ошибок в IE, если это возможно

Спасибо Паоло Бергантино за совет "onmousedown".

2 голосов
/ 28 января 2009

Это работает для меня в Firefox, хотя я не пробовал IE. Попробуйте нажать на строку foo.style.preventDeselect = "true";, когда выделите текст. Использует событие mousedown.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
                    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
  <script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<script>
$(document).ready(function() {
    $('#test').mousedown(function() {
        return false;
    });
});
</script>
<body>

Highlight some text on this webpage, then click basically anywhere on the document. Your selection will disappear.<br><Br>

Is there a way to prevent this behavior when the user clicks on a specific element, either by CSS or Javascript?<br><Br>

E.g.:<br><Br>

var element = document.getElementById("foo");<br>
foo.onclick = function(e){<br>
   //some magic here that prevents deselection from occuring<br>
}<br><Br>

or<br><Br>

<span id='test'>foo.style.preventDeselect = "true";</span><br><Br>

Thanks!<br><Br>

</body>
</html>
1 голос
/ 28 января 2009

А как же

if(e.preventDefault) 
    e.preventDefault();
else
    e.returnValue = false;
1 голос
/ 28 января 2009

Такое поведение, хотя и является в основном универсальным в современных браузерах, зависит от браузера / реализации и практически не связано с CSS или Javascript. В частности, обратите внимание, что Firefox поддерживает отдельные состояния выбора для страницы в целом и содержимого текстовых полей, в то время как IE этого не делает. Хуже того, рассмотрим браузеры в текстовом режиме с отдельными интерфейсами выбора мыши и клавиатуры.

0 голосов
/ 22 января 2010

лучший способ, который я понял, как это сделать, для IE вам нужно настроить прослушиватель на «onselectstart». Для Mozilla и других браузеров вы можете сделать это на «mousedown». Это будет работать только в том случае, если вы не используете 'mousedown' в любой другой части вашего сайта!

Отрывок: YUI способ: FF браузер:

  • YAHOO.util.Event.addListener (окно, 'mousedown', function (evt) { YAHOO.util.Event.preventDefault (EVT); });

    IE Browser: В IE вы не можете установить этот слушатель на окно, так как в IE это не работает. Лучше всего сделать, чтобы на вашем элементе тела установить элемент класса, затем ссылаться на него и применять слушатель этого элемента объекта.

  • // Получить элемент по классу и присвоить var bar YAHOO.util.Event.addListener (бар, 'selectstart', функция (evt) { YAHOO.util.Event.preventDefault (EVT); });

Если вы хотите сделать это простым способом, просто сделайте

  • window.onMouseDown = function () {return false;}

или для IE

  • body.onSelectStart = function () {return false;}

Надеюсь, это поможет.

0 голосов
/ 14 сентября 2009

На всякий случай, если кто-нибудь проверит это, у меня возникла похожая проблема. Мне нужно было запустить какой-нибудь javascript для фрагмента выделенного текста, который был запущен, нажав на кнопку панели инструментов (охват с background-image). Я решил свою проблему, изменив промежутки на якоря с помощью ссылки «javascript: void (0)». Это не позволило отобрать выделенный текст.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...