Forum Webscript.Ru
Программирование => JavaScript & JScript => Тема начата: Night_Wolf от 19 Сентября 2007, 17:00:38
-
Добрый день,
никак не могу разобраться с вопросом по контекстному меню, надеюсь наталкнете меня в правильное направление.
Вообщем задача следующая:
необходимо отключить контекстное меню от правой кнопки мыши, за исключением вызова оного на любом элементе input.
function formsruler()
{
var forms = document.getElementsByTagName(\'form\');
for (var i=0;i {
var inp=forms.getElementsByTagName(\'input\');
for(var j=0;j {
inp[j].oncontextmenu = new Function("return true");
}
}
}
document.oncontextmenu = new Function("return false");
Вот еслиб одно другое не перекрывало...
Возможно конечно пройтись по всем остальным элементам страницы без исключения и прописать им return false. Но это ж как-то геморно выходит:abuse:
Поделитесь идеями, плиз.
-
Вот функция которая тебе нужна:
function check(oEvent) {
var oEvent = !oEvent ? window.event : oEvent;
var oElement = oEvent.target ? oEvent.target : oEvent.srcElement;
if (\'INPUT\' == oElement.tagName) {
return true;
}
return false;
}
document.oncontextmenu = check;
Данный код работает в IE, FireFox, Safari, но не в Opera. Скорее всего Opera до сих пор не поддерживает onContextMenu.
-
Спасибо!
Понял, надо смотреть в сторону event. Замечательная наверное штука:) Подскажите еще, пожалуйста, куда смотреть в сторонувыделения теста (onselectstart)?
srcElement?
-
Не совсем понял что тебе именно нужно. Контекстное меню - это только событие и перехватчик для него, которое возникает когда ты нажимаешь правую кнопку мыши, больше ты ничего с ним не можешь сделать. Если тебе нужно заменить его на свое меню, то тогда тебе просто нужно создать слой и отображать его в функции перехватчика, в зависимости от координат курсора (с поправкой на полосу прокрутки и видимую область страницы).
-
В сообщении опечатался. Нет, своего меню мне не надо:) Сейчас разбераюсь как создать перехватчик выделения текста. Мне нужно, чтоб как вызов контекстного меню, так и выделение текста было возможно только для элементов формы.
oElement.onselectstart - было б хорошо, но скрипт не понимает данное свойство. Копаю, как усовершенствовать функцию, добавив к ней перехват выделения текста в INPUT.
-
Делай также как и с oncontextmenu, т.е.:
document.onselectstart = check;
В данном случае функция используется таже, но ее можешь изменить для нужных тебе элементов.
[!]У данного обработчика ситуация с покрытием браузеров хуже, чем с контекстным меню.
[i]Вообще если ты это делаешь для защиты контента страницы, то можешь не утруждаться.
-
Спасибо, Spectrum.Wolf! Вот уж все гениальное просто!
Теперь понятнее принцип event.
По поводу замечаний,
[!]У данного обработчика ситуация с покрытием браузеров хуже, чем с контекстным меню.
Что ж тут поделаешь? У каждого браузера свои заморочки.
Ориентируюсь на Explorer, и потихоньку добавляю аналоги для каждого браузера. Я вообще подгружаю не кроссбраузерные функции, а сразу js для текущего браузера. Конечно, один получаеться - более функциональный, другой - менее...
Вообще если ты это делаешь для защиты контента страницы, то можешь не утруждаться.
Делаю для имитации диалогового окна.
-
Понятно, ну тогда нормуль! :)
[i] Незнаю какие у тебя потребности, но для эмуляции кросс-браузерного диалогового окна обычно делают следующее:
1) Скрывают все селект-боксы и элементы, которые прорисовываются через слои
2) Накрывают всю рабочую область экрана полупрозрачным или непрозрачным слоем
3) Над слоем создают еще один слой собственно с сообщением, кнопками и всем что необходимо.
Это на всякий пожарный инфа для размышления.