1

我正在从头开始创建一个非常简单的 RTE,旨在仅与新浏览器一起使用。

一切正常,除了在 Opera 中我无法让它在按下工具栏时停止取消选择文本。我创建了一个简单的页面来测试这是否是我的小程序的一部分,或者它是否总是发生,并且确实如此。

例如,我用一些代码创建了一个页面,这在除 Opera 之外的所有大型浏览器中都可以正常工作:

<p id="tmp">This text cannot be selected</p>
<p id="lispsum">Lorem ips...im id est laborum.</p>
<script type="text/javascript">
var el = document.getElementById('tmp');
el.addEventListener('mousedown', function(evt) {
    evt.preventDefault();
}, false);
</script>

在 Chrome 和 Firefox 等浏览器中,选择“lipsum”段落中的一些文本,然后单击“tmp”段落会保留所选内容。在 Opera(在版本 12 中测试)它取消选择它。如果按住鼠标,则只有在光标未移动时才会取消选择。因此,在 Opera 中,“非拖动”(即长按)和“单击并拖动”之间的行为有所不同。

我尝试过使用 evt.stopPropagation() 方法,evt.returnValue = false; 并返回假;像这样添加到处理程序中:

el.addEventListener('mousedown', function(evt) {
    if(evt.stopPropagation) evt.stopPropagation();
    if(evt.preventDefault) evt.preventDefault();
    if(evt.returnValue) evt.returnValue = false;
    return false;
}, false);

然后,我为以下事件添加了相同的处理程序:mouseup、mousedown、mouseout、click、select、selectstart 和 selectchange。没有任何帮助。

我还尝试使用 jQuery 方法“disableSelection()”:

$("#tmp").disableSelection();

但行为是相同的,元素中的文本不可选择,但在其中单击仍会取消选择任何先前的选择。

还有其他人遇到这个问题吗?非常令人沮丧。

编辑:再次阅读我的评论并进行一些测试,我可以得出结论,由于长按和单击并拖动之间的区别,“单击”事件中一定存在错误。在这两种情况下都会触发 mouseup 事件,但只有在光标未移动时才会触发单击(即文本被取消选中时)。

4

0 回答 0