Задержка выполнения после срабатывания EventListener - PullRequest
0 голосов
/ 14 сентября 2018

Я новичок в javascript, и у меня много путаницы ... Я пытаюсь написать скрипт на Tampermonkey, который позволил бы поместить курсор в конец области ввода после того, как "скопировать" прослушиватель событийсрабатывает.Это сайт, на котором я хочу его применить: https://voicenotebook.com/#medtrdiv Оригинальный код:

var input = document.querySelector('#docel');
var textarea = document.querySelector('#docel');
var reset = function (e) {
   var len = this.value.length;
    this.setSelectionRange(len, len);
};
input.addEventListener('copy', reset, false);
textarea.addEventListener('copy', reset, false);

Проблема в том, что если я нажимаю кнопку "Копировать", он не копирует текст, хотя иставит курсор в конец.Так что я думаю, проблема в том, что функция выполняется слишком рано.

Я хотел добавить некоторую задержку для этой функции, но, похоже, ничего не работает.Поэтому я думаю, что решение будет заключаться в том, чтобы отложить функцию на 100 мсек, как только сработает обработчик событий.Вот что я попробовал:

var input = document.querySelector('#docel');
 var textarea = document.querySelector('#docel');
     var reset = function (e) {
     var len = this.value.length;
     this.setSelectionRange(len, len);
  };
 textarea.addEventListener('copy', setTimeout(reset, 100), false);
 input.addEventListener('copy', setTimeout(reset, 100), false);

Я знаю, что это, вероятно, не имеет смысла вообще.Я пробовал разные вещи тоже.Я исследовал много тем по этому поводу, но у меня ничего не работает.Не могли бы вы помочь мне разобраться?Заранее спасибо!

1 Ответ

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

В написанном вами коде есть несколько проблем.

  • id должен быть уникальным на странице.

  • Вы намереваетесь отложить setSelectionRange. Это происходит, когда срабатывает событие copy. Переместите setTimeout внутрь функции reset.

  • Кроме того, если вы хотите выделить текст с самого начала, ваш первый аргумент должен быть 0.

Ваше событие будет запущено когда-нибудь в будущем, и обтекание reset ссылки на функцию в обработчике события действительно не делает ничего, кроме привязки обработчика события.

var input = document.querySelector('#docel1');
var textarea = document.querySelector('#docel2');

var reset = function(e) {
	var context = this;
  
  setTimeout(function() {
    var len = context.value.length;
    context.setSelectionRange(0, len);
  }, 100);
};

input.addEventListener('copy', reset, false);
textarea.addEventListener('copy', reset, false);
<input id="docel1" />
<textarea id="docel2" />
...