在函数内部,我有一个事件处理程序。到现在为止还挺好。但是在那个事件处理程序中,我想捕获 Enter ,并将其替换为HTML。
我这样做了:
CrossBrowserEventHandler(Editor, 'keyup', function(Event) { myFunctionRef(idname, Event) });
var myFunctionRef = function myFunction(idname, Event)
{
var keyCode;
if (!Event && window.event) {
Event = window.event;
}
if (Event) {
keyCode = (window.Event) ? Event.which : Event.keyCode;
if (keyCode == 13) {
Event.target.ownerDocument.execCommand("inserthtml",false,'<br />');
Event.returnValue = false;
}
}
PushText(idname); /* pushes the input from a rich text iframe to a textarea */
}
跨浏览器事件处理函数如下所示:
function CrossBrowserEventHandler(target,eventName,handlerName)
{
if (target.addEventListener) {
target.addEventListener(eventName, handlerName, false);
}
else if (target.attachEvent) {
target.attachEvent("on" + eventName, handlerName);
}
else {
target["on" + eventName] = handlerName;
}
}
在第一部分中,我捕获了键码13(返回)并通过execCommand将其替换为HTML换行符。它做到了,但两次。它不会取消/删除实际的按下返回事件。
任何想法(除了使用JS框架的标准建议,我不能因为多种原因,其中一个是实际学习的过程)?
答案 0 :(得分:0)
你不应该捕获密钥代码10而不是13吗? 10表示换行符,而13表示回车符。
编辑:您可能会两次获得该事件a)您可能已经注册了两次或者b)事件可能正在冒泡。对于b,我建议您取消冒泡,例如
...
if (keyCode == 13) {
Event.target.ownerDocument.execCommand("inserthtml",false,'<br />');
Event.returnValue = false;
Event.cancelBubble = false;
}
...
然而,另一个建议是从事件处理函数返回false。例如,
...
Event.returnValue = false;
Event.cancelBubble = false;
return false;
}
...
并且
CrossBrowserEventHandler(Editor, 'keyup', function(Event) { return myFunctionRef(idname, Event) });