在自定义内容编辑器组件(contenteditable
div)中,我需要阻止某些字符输入。如果用户尝试输入受限字符,则会显示一个引导模式对话框,说明限制("您不能使用' x')并且事件被阻止(preventDefault
)。在关闭对话框后,焦点将重新回到contenteditable,输入可以恢复。
在驳回对话框后,焦点确实回到了满足的目标。但是,第一个关键事件不会绕过keypress事件侦听器触发keypress
。
我尝试手动设置焦点并在contenteditable上明确设置文档选择,没有运气。我已经尝试过使用jquery和纯js。
任何想法为什么第一个事件绕过了按键监听器?
JSFiddle here,示例限制"。"输入:
<div id="testMe" contenteditable="true" class="form-control"></div>
<div id="myModal" class="modal fade">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-body">
<p> You are not allowed to use this character.</p>
<p> Press OK to dismiss.</p>
</div>
<div class="modal-footer">
<button id="closeAlert" type="button" class="btn btn-danger">OK</button>
</div>
</div>
</div>
</div>
$("#testMe").keypress(function(event) {
console.log("key pressed");
if (String.fromCharCode(event.which) == ".") {
event.preventDefault();
$('#myModal').modal('show');
}
});
$("#closeAlert").click(function() {
$('#myModal').modal('hide');
});
答案 0 :(得分:0)
事实证明,问题在于回顾元素的焦点。添加
$("#testMe").focus();
隐藏模态后修复它。
我最初使用bootbox
库来显示模态。由于不明原因,在对话框关闭回调后立即设置焦点不起作用。