【问题标题】:How can you prevent clearing the selection before onclick event processing?如何防止在 onclick 事件处理之前清除选择?
【发布时间】:2022-02-26 20:00:55
【问题描述】:

我想将事件处理程序附加到处理当前选择的<span> 节点,但在点击事件触发之前,似乎选择已被浏览器清除(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,但我无法控制这些元素,所以我不能只使用&lt;a&gt;而不是&lt;span&gt;

【问题讨论】:

    标签: jquery jquery-events textselection getselection


    【解决方案1】:

    快速而肮脏的解决方案是使用wrap() -

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

    然后您可以尝试将您的 click 事件附加到 &lt;a&gt; 标记上,这有效(如您所述)

    【讨论】:

    • 是的,但是我尝试将此行为附加到的元素没有我可以使用的不错的选择器。 (而且我真的不想在每次页面加载时都像这样通过 jQuery 处理我的 DOM)
    【解决方案2】:

    如果您是从 google 获得的,这可能就是您想要的:处理 onmousedown 而不是 onclick。它写在帖子中,但如果你像我一样是一个懒惰的读者,你会略读并错过它。

    【讨论】:

      猜你喜欢
      • 2018-07-27
      • 2015-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      • 2020-04-07
      • 1970-01-01
      相关资源
      最近更新 更多