Отменить обработку события
Всем привет!
Не могу понять, как можно отменить обработку браузером события от клавиатуры. Сочетания клавиш совпадают с хоткеями браузера, и он выполняет оба действия - мою функцию и свою, привязанную к хоткею, что мне совсем не по душе). function OnKeyPress(ev) { if (!ev) ev = window.event; if (ev.ctrlKey) { if (ev.keyCode==17) return; switch (key = String.fromCharCode(ev.keyCode).toUpperCase()) { case ... // выбираем свои сочетания, если не то - выходим default: return; } // вот тут пытаемся отменить событие по-всякому ev.returnValue = false; ev.stopPropagation(); ev.preventDefault(); return false; } // if } В основном тестирую под Оперой, но проверял на Лисе, Хроме, Сафари - везде та же ботва. Я уже себе весь мозг сломал (( |
keydown до кучи еще отменять не мешало бы. И вообще такие комбинации на keydown ловить надо.
|
Вложений: 1
Поменял на keydown, ничего не изменилось... до этого обработка стояла на onkeyup, просто название метода не исправил).
Фича точно работает на форуме на движке vBulletin, но там настолько замороченный код... основные моменты я оттуда выцепил, но они почему-то не пашут (кстати, здесь тоже есть такая фича!). Собственно тестовая страничка в аттаче, если потребуется. Пытаюсь сделать скрипт для быстрой вставки тегов. |
Смотреть какая клавиша нажата нужно на keydown, а отменять и keydown и keypress.
|
Проблема решилась!
var Handled; // блокировать обработку, если уже поймали событие в OnKeyDown. function OnKeyPress(ev) { if (Handled) return false; } function OnKeyDown(ev) { Handled = false; if (!ev) ev = window.event; if (ev.ctrlKey) { if (ev.keyCode==17) return; var tag = ""; var tag_param = false; // определяем тег в зависимости от нажатой клавиши switch (key = String.fromCharCode(ev.keyCode).toUpperCase()) { case "B": case "U": case "I": tag = key; break; case "Q": tag = "SPOILER"; tag_param = true; break; case "R": tag = "URL"; tag_param = true; break; default: return; } Handled = true; var edit = ev.target; var opentag = (tag_param) ? ("["+tag+"=\"\"]") : ("["+tag+"]"); var closetag = "[/"+tag+"]"; // вставка тегов вокруг выделенного текста edit.focus(); // ! ie? if (edit.selectionStart==null) // некий неясный финт ушами { var rng=document.selection.createRange(); rng.text=opentag+rng.text+closetag; } else { var selStart = edit.selectionStart; edit.value = edit.value.substring(0,selStart)+opentag+ edit.value.substring(selStart,edit.selectionEnd)+closetag+ edit.value.substring(edit.selectionEnd); // поставить курсор после открывающего тега (или между кавычками, если они есть edit.selectionStart = selStart + opentag.length - ((tag_param) ? 2 : 0); edit.selectionEnd = edit.selectionStart; } // отменить дальнейшую обработку ev.returnValue = false; ev.stopPropagation(); ev.preventDefault(); return false; } // if } function init() { document.getElementById("msgedit").onkeydown = MemoOnKeyDown; document.getElementById("msgedit").onkeypress = MemoOnKeyPress; } Теперь еще осталось найти замену ev.target для осла... |
ev.srcElement
|
window.event.srcElement //target |
О! Здорово, благодарю). Заработало!
|
Часовой пояс GMT +3, время: 04:54. |