Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.02.2018, 16:33
BNB BNB вне форума
Интересующийся
Отправить личное сообщение для BNB Посмотреть профиль Найти все сообщения от BNB
 
Регистрация: 09.02.2018
Сообщений: 27

Вопрос про dblclick и его стандартный внутренний обработчик
В body есть код:

<ul id="list">
    <li>Elem1</li>
    <li>Elem2</li>
 </ul>


В теге скрипт есть:
let ul = document.querySelector('#list');
    let lis = ul.getElementsByTagName("li");
    
    for (let i = 0; i < lis.length; i++) {
      let li = lis[i];
      
      li.addEventListener("dblclick", dblclickHandler);
    }
    
    function dblclickHandler(event) {
      event.preventDefault();
      event.stopImmediatePropagation();
    }


Как я понимаю, для события dblclick в документе браузер имеет свой внутренний стандартный обработчик на выделение текста при возникновении данного события. В моем коде я хочу отменить это выделение и для этого в своём обработчике события dblclick отменяю действие по умолчанию с помощью event.preventDefault(), прерываю все обработчики события dblclick для данного элемента и запрещаю всплытие с помощью event.stopImmediatePropagation(). Собственно вопрос, почему браузер все равно выделяет текст? Если поставить обработчик с командой event.preventDefault() на событие mousedown, то все будет работать корректно, только понять не могу почему. Может я чего-то не понимаю в технологии работы событий и их обработчиков? Заранее спасибо за ответ.

P.S. Тестировал в Chrome

Последний раз редактировалось BNB, 09.02.2018 в 16:42.
Ответить с цитированием
  #2 (permalink)  
Старый 09.02.2018, 16:50
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Сообщение от BNB
Может я чего-то не понимаю в технологии работы событий и их обработчиков?
Ты смешиваешь события, которые может обрабатывать JS и действия браузера.

Завтра они еще что-то придумают и нашим программка пипец.
Ответить с цитированием
  #3 (permalink)  
Старый 09.02.2018, 17:14
BNB BNB вне форума
Интересующийся
Отправить личное сообщение для BNB Посмотреть профиль Найти все сообщения от BNB
 
Регистрация: 09.02.2018
Сообщений: 27

Хм, ну в учебнике в теме "действия браузера по умолчанию" сказано, что двойной клик на тексте инициирует его выделение и такое действие является действием браузера по умолчанию, затем, сказано, что отменять такие действия по умолчанию можно с помощью метода у объекта события, то есть event.preventDefault(). Получается, я должен создать обработчик для dblclick и там прописать метод event.preventDefault(), чтобы действие по умолчанию (в данном случае выделение текста) отменить. В чем тогда я ошибаюсь и почему тогда данный обработчик, но на событии mousedown работает? Можно подробнее объяснить?) Спасибо.
Ответить с цитированием
  #4 (permalink)  
Старый 09.02.2018, 17:32
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

<ul  onmousedown="return false" onselectstart="return false">
    <li>Elem1</li>
    <li>Elem2</li>
 </ul>

Источник - Отмена выделения
Ответить с цитированием
  #5 (permalink)  
Старый 09.02.2018, 17:36
BNB BNB вне форума
Интересующийся
Отправить личное сообщение для BNB Посмотреть профиль Найти все сообщения от BNB
 
Регистрация: 09.02.2018
Сообщений: 27

Мне не нужна тема про отмену выделения, я её уже читал и про preventDefault() в dblclick ничего не нашел. Все способы в этой теме описаны через другие события, а я хочу понять, почему отмена в обработчике события dblclick не работает)
Ответить с цитированием
  #6 (permalink)  
Старый 09.02.2018, 17:44
BNB BNB вне форума
Интересующийся
Отправить личное сообщение для BNB Посмотреть профиль Найти все сообщения от BNB
 
Регистрация: 09.02.2018
Сообщений: 27

Пока только нашел зацепку на способе 2 из темы отмены выделений. Там говорится, что с помощью метода clearSelection() в обработчике события dblclick мы снимает выделение пост-фактум, то есть выделение сначала появляется и потом сразу исчезает. Получается, что действия браузера на событие dblclick срабатывают раньше обработчиков, которые пишем мы или действие браузера на выделение текста возникает до события dblclick? Но, в то же время, в теме "действия браузера по умолчанию" говориться, что данное действие браузера возникает при возникновении события dblclick... Вообщем, пока у меня каша в голове по этому поводу)
Ответить с цитированием
  #7 (permalink)  
Старый 09.02.2018, 17:55
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

BNB,
dblclick - комплексное событие

Вот его составляющие:
mousedown
mouseup
click
mousedown
mouseup
click
dblclick

Судя по всему, браузер делает выделение при двух подряд mousedown,
И preventDefault() на dblclick делать уже поздно.
<ul id="list">
    <li>Elem1</li>
    <li>Elem2</li>
 </ul>
<script>
let ul = document.querySelector('#list');
    let lis = ul.getElementsByTagName("li");
    
    for (let i = 0; i < lis.length; i++) {
      let li = lis[i];
      
      li.addEventListener("dblclick", dblclickHandler);
    }
    
    function dblclickHandler(event) {
      alert("dblclick");
      event.preventDefault();
      event.stopImmediatePropagation();
    }
</script>
Ответить с цитированием
  #8 (permalink)  
Старый 09.02.2018, 17:57
BNB BNB вне форума
Интересующийся
Отправить личное сообщение для BNB Посмотреть профиль Найти все сообщения от BNB
 
Регистрация: 09.02.2018
Сообщений: 27

Понял, спасибо. Буду надеяться, что так оно и есть)
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос про особенности работы ОС sexyQuery Оффтопик 5 02.07.2013 10:46
еще один вопрос про кнопки и события f0rzik Общие вопросы Javascript 15 19.01.2013 23:19
Вопрос про lastModiefied Sundro Общие вопросы Javascript 1 07.07.2011 12:14
Java - Здравствуйте, вопрос про написание js noobasik Оффтопик 16 28.07.2010 03:38
Вопрос про ООП, цепочки прототипов. Shaci Общие вопросы Javascript 5 27.01.2010 14:50