当拼写检查打开时,上下文菜单事件在ie上不起作用
Context menu event not working on ie when spellcheck is on
当将contextmenu事件附加到充满拼写错误的内容可编辑div时,IE(11)忽略回调并显示自己的拼写检查菜单。
jsbin: http://jsbin.com/favit/3/(您应该预览它,然后编辑div,您将看到问题)
关闭拼写检查不是一个选项,因为我不能告诉客户这样做。
我在谷歌上遇到这个问题,我想我应该发布一个答案,以防有人在谷歌上搜索这个问题。这就是如何在IE 上添加你自己的上下文菜单,而不需要禁用拼写检查。它甚至可以在你右键单击拼写错误的单词并在其下方加红色下划线时使用。
基本上有两个步骤:
1)在mousedown事件中,您需要禁用对contenteditable元素的拼写检查。
2)之后,重新启用对contenteditable元素的拼写检查。
下面是一个工作示例:
var editable = $('#editable');
var mouseX, mouseY;
$(document).mousemove(function(event) {
mouseX = event.pageX;
mouseY = event.pageY;
});
editable.mousedown(function(e) {
if (e.button == 2) {
editable.attr('spellcheck','false');
e.preventDefault ? e.preventDefault : e.returnValue = false;
e.stopPropagation();
return false;
}
return true;
});
editable.get(0).oncontextmenu = function(e) {
e.preventDefault ? e.preventDefault : e.returnValue = false;
return false;
};
editable.on("contextmenu", function(e) {
e.preventDefault ? e.preventDefault : e.returnValue = false;
e.stopPropagation();
if ($('#contextmenu').length == 0) {
$('<div>').attr('id', 'contextmenu').appendTo('body');
$('#contextmenu').css('z-index', 1000);
$('#contextmenu').css('position', 'absolute');
$('<ul>').appendTo('#contextmenu');
$('<li>').html('some').appendTo('#contextmenu ul');
$('<li>').html('text').appendTo('#contextmenu ul');
$('<li>').html('here').appendTo('#contextmenu ul');
}
$('#contextmenu').css('top', mouseY);
$('#contextmenu').css('left', mouseX);
$('#contextmenu li').click(function() {
$('#contextmenu').remove();
editable.attr('spellcheck','true');
});
});
#contextmenu {
border: 1px solid #000;
background-color: #fff;
padding: 5px;
}
#contextmenu ul {
list-style-type: none;
padding: 0px;
margin: 0px;
}
#contextmenu li {
cursor: pointer;
padding: 2px;
}
#contextmenu li:hover {
background-color: #2daade;
color: #fff;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="editable" contenteditable="true">Click me and type some badly spelled words.</div>
明白了:添加属性"spellcheck",将其值设置为"false",可以解决这个问题。
<div contenteditable="true" spellcheck="false">
example notaword
</div>
相关文章:
- 使用java脚本更改onClick事件中菜单选项卡的颜色
- 下拉菜单大小已更改事件
- jQuery与导航菜单上的mouseover事件冲突.
- 单击事件打开两个弹出菜单
- Javascript问题与下拉菜单上的单击事件有关
- 响应菜单问题-如何在移动环境中处理HREF和onclick事件
- 关闭 jQuery 中的菜单事件
- API Google Maps Javascript在上下文菜单中调用事件侦听器
- 用于关闭和打开的Jquery事件选择下拉菜单,而不是在更改时
- 在聚合物的子菜单标题中添加事件
- 如何在Jquery mobile中处理动态选择菜单事件
- 如果元素是在循环中创建的,则引导下拉菜单不会触发单击事件
- 显示和隐藏上下文菜单时的 Jstree 调用事件
- 单击事件在响应菜单中不起作用
- 引导明细菜单:跳回主菜单事件
- 事件的动态网格菜单
- 单击文本框的右键单击上下文菜单的“删除”后触发的事件
- 将事件处理附加到菜单和按钮
- 关闭菜单,单击带有事件侦听器和父节点的正文
- javascript onchange vs onkeyup事件