Как вы можете предотвратить очистку выделения перед обработкой события onclick?

Я хочу прикрепить обработчик события к <span> узел, который обрабатывает текущий выбор, но до того, как сработает событие click, создается впечатление, что выбор очищен браузером (Chrome 16.0.912.63).

Я могу немного обойти эту проблему, прикрепив обработчик к onmousedown, но я бы предпочел не делать это таким образом.

Вот краткий пример HTML, который иллюстрирует проблему (требуется jQuery):

<span class="paste">PASTE</span>
<textarea id="selected"></textarea>

<script type="text/javascript">
  $('.paste').click(function(e) {
      var txt = window.getSelection(); // works only in Chrome, Safari, FF
      $('#selected').val(txt);
      e.stopPropagation();
  });
</script>

Желаемым бехивором является то, что я могу выделить текст с помощью мыши, а затем нажать на слово "PASTE", чтобы содержимое выделенной области было вставлено в текстовую область. Похоже, что выбор очищается до срабатывания обработчика щелчков. Этот код прекрасно работает, если я использую:

<a class="paste" href="#">PASTE</a>

вместо элемента span, или если я связываю onmousedown, но я не контролирую элементы, поэтому я не могу просто использовать <a> вместо <span>,

2 ответа

Быстрое и грязное решение заключается в использовании wrap() -

$('span.paste').wrap('<a class="paste" />');

и тогда вы можете попытаться прикрепить свой click событие в <a> тег, который работает (как вы упомянули)

Если вы получили здесь от Google, это, вероятно, то, что вы хотите: handle onmousedown вместо onclick, Это написано в посте, но если вы ленивый читатель, как я, вы просмотрели его и пропустили.

Другие вопросы по тегам