我正在从头开始创建一个非常简单的 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 事件,但只有在光标未移动时才会触发单击(即文本被取消选中时)。