При двойном щелчке по html-странице большинство браузеров выбирают слово, которое вы дважды щелкаете (или абзац, который вы тройной щелчок). Есть ли способ избавиться от этого поведения?
Обратите внимание, что я не хочу отключать регулярный выбор одним нажатием + перетаскивание; то есть jQuery UI $('body').disableSelection()
и событие document.onselectstart
DOM не то, что я хочу.
Ответ 1
Я боюсь, что вы не можете помешать самому выбору быть "родным поведением" браузера, но вы можете очистить выбор сразу после его создания:
<script type="text/javascript">
document.ondblclick = function(evt) {
if (window.getSelection)
window.getSelection().removeAllRanges();
else if (document.selection)
document.selection.empty();
}
</script>
Изменить: чтобы предотвратить выбор всего абзаца "тройным щелчком", вот требуемый код:
var _tripleClickTimer = 0;
var _mouseDown = false;
document.onmousedown = function() {
_mouseDown = true;
};
document.onmouseup = function() {
_mouseDown = false;
};
document.ondblclick = function DoubleClick(evt) {
ClearSelection();
window.clearTimeout(_tripleClickTimer);
//handle triple click selecting whole paragraph
document.onclick = function() {
ClearSelection();
};
_tripleClickTimer = window.setTimeout(RemoveDocumentClick, 1000);
};
function RemoveDocumentClick() {
if (!_mouseDown) {
document.onclick = null;
return true;
}
_tripleClickTimer = window.setTimeout(RemoveDocumentClick, 1000);
return false;
}
function ClearSelection() {
if (window.getSelection)
window.getSelection().removeAllRanges();
else if (document.selection)
document.selection.empty();
}
Живой тест.
Должен быть перекрестный браузер, сообщите в любой браузер, где он не работает.
Ответ 2
Просто поместите это в интересующий раздел css
-moz-user-select : none;
-khtml-user-select : none;
-webkit-user-select : none;
-o-user-select : none;
user-select : none;
Ответ 3
Если вы действительно хотите отключить выбор с двойным щелчком, а не просто удалить выделение после этого (выглядит уродливо для меня), вам нужно return false
во втором событии mousedown (ondblclick won ' t, потому что выбор сделан на mousedown).
** Если кто-то вообще не хочет выбора, лучшим решением является использование CSS user-select : none;
, как предлагается Маурицио Баттагини.
// set to true if you want to disable also the triple click event
// works in Chrome, always disabled in IE11
var disable_triple_click = true;
// set a global var to save the timestamp of the last mousedown
var down = new Date().getTime();
var old_down = down;
jQuery(document).ready(function($)
{
$('#demo').on('mousedown', function(e)
{
var time = new Date().getTime();
if((time - down) < 500 &&
(disable_triple_click || (down - old_down) > 500))
{
old_down = down;
down = time;
e.preventDefault(); // just in case
return false; // mandatory
}
old_down = down;
down = time;
});
});
Живая демонстрация здесь
Важное замечание: Я установил чувствительность до 500 мс, но чувствительность двойного щелчка (максимальное время между щелчками, обнаруженным как двойной щелчок) может варьироваться в зависимости от операционной системы и браузера, настраивается. - api.jquery.com
Протестировано в Chrome и IE11.
Ответ 4
В текущем браузере Chrome (v56), Firefox (v51) и MS Edge (v38) работает для меня.
var test = document.getElementById('test');
test.addEventListener('mousedown', function(e){
if (e.detail > 1){
e.preventDefault();
}
});
<p id="test">This is a test area</p>
Ответ 5
Просто, чтобы выбросить это, но вот код, который я нажимаю на мои страницы, где я ожидаю, что пользователи будут быстро щелкать. Тем не менее, это также отключит стандартный выбор текста с щелчком мыши.
document.body.onselectstart = function() {
return false;
}
document.body.style.MozUserSelect = "none";
if (navigator.userAgent.toLowerCase().indexOf("opera") != -1) {
document.body.onmousedown = function() {
return false;
}
}
Кажется, хорошо работает для меня.