2010-09-20 63 views
0

函数内部我有一个事件处理函数。到现在为止还挺好。但在那个事件处理程序,我想捕获输入按下并替换为HTML。跨浏览器事件处理程序必须捕获[ENTER]

我已经做了这样的:

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

你不应该捕获键码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) }); 
+0

在这种情况下,我想捕捉13,而不是10 – 2010-09-20 06:33:24

+0

可以是事件冒泡的情况下 - 我已经编辑我的答案。 – VinayC 2010-09-20 07:24:43

+0

不幸的是,它仍然通过execCommand之后的Enter。让我详细说明这一点。它用于富文本区域功能,并且由于大多数浏览器将返回转换为HTML段落(IE和FF)或包含在div中的换行符,因此为了统一起见,我希望它将返回转换为换行符。 – 2010-09-20 07:52:30