尽管在mousedown上有e.preventDefault,Opera仍然会取消选择

时间:2013-01-11 15:36:28

标签: javascript events preventdefault rte

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

0 个答案:

没有答案