Кросс-браузерный обработчик событий должен захватывать [ENTER] - PullRequest
0 голосов
/ 20 сентября 2010

Внутри функции у меня есть обработчик событий. Все идет нормально. Но в этом обработчике событий я хочу перехватить нажатой 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-фреймворка, который я не могу по многим причинам, одной из которых является процесс реального изучения чего-либо)?

1 Ответ

0 голосов
/ 20 сентября 2010

Разве вы не должны захватывать код ключа 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) });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...