2010-09-20 3 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) событие могло бы пузыриться вверх. Для б, я полагаю, что вы отмените кипящий такие как

... 
     if (keyCode == 13) { 
      Event.target.ownerDocument.execCommand("inserthtml",false,'<br />'); 
      Event.returnValue = false; 
      Event.cancelBubble = false; 
     } 
... 

Тем не менее, еще одно предложение, чтобы вернуть ложь из функции обработчика событий. Например,

... 
     Event.returnValue = false; 
     Event.cancelBubble = false; 
     return false; 
    } 
... 

И

CrossBrowserEventHandler(Editor, 'keyup', function(Event) { return myFunctionRef(idname, Event) }); 
+0

В этом случае я хочу, чтобы захватить 13, а не 10. –

+0

Может быть случаем пропускания событий - я редактировал свой ответ. – VinayC

+0

Не работает, к сожалению, он все еще передает ввод, за которым следует execCommand. Позвольте мне подробно остановиться на этом. Он используется для функции Rich Text Area, и поскольку большинство браузеров преобразуют возврат в HTML-абзац (IE и FF) или в строку, заключенную в div, я хочу, чтобы она преобразует возврат в линейную строку для равномерности. –

Смежные вопросы