Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » Mozilla Firefox и JavaScript events

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

CheRt



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброго времени суток!
 
Возникла проблема перехвата событий в Mozilla Firefox (в IE и Opera все ок):
 
Есть простейший код, симмулирующий вызов события по изменению в текстовом поле:

Код:
 
<html>
  <head>
  </head>
<body>
  <input type="text" id="inpField">
 
  <script language="JavaScript">
    var inpField;
    function initE() {
      inpField = document.getElementById('inpField');
      inpField.onkeyup = function() { reaction(); };
    }
 
    function reaction(e) {
      var event = e || window.event;
      alert(event);
    }
    initE();
  </script>
</body>
</html>
 

 
В IE отрабатывает window.event, в опере парметр функции. В файрфоксе не срабатывает сей гибридный метод перехвата в принципе. Вопрос: в какую сторону рыть? Зачитал ряд статей и примеров - везде пользуют var event = e || window.event, как кроссбраузерный вариант решения, однако таковым он не является.


----------
В огне бода нет и не будет!
До встречи в СССР 2.0!

Всего записей: 1118 | Зарегистр. 14-12-2001 | Отправлено: 23:54 18-02-2009
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
CheRt

Цитата:
Зачитал ряд статей и примеров - везде пользуют var event = e || window.event, как кроссбраузерный вариант решения, однако таковым он не является.  

используйте код, что я написал для борды

Код:
function myEvent(where,evt,func,op)
{if (op=="+")
  {if (where.attachEvent) where.attachEvent("on"+evt,func)
  else if (where.addEventListener) where.addEventListener(evt,func,false)}
  else {if (where.detachEvent) where.detachEvent("on"+evt,func)
  else if (where.removeEventListener) where.removeEventListener(evt,func,false)}
}

 
позволяет цеплять не один обработчик
внутри же обработки

Код:
function get_e(e)
{return (e)?e:(window.event)?event:null}

 
если же хотите свой вариант, то правильно вызывайте функцию

Код:
   inpField.onkeyup = function(evt) { reaction(evt); };



----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 23:59 18-02-2009 | Исправлено: Cheery, 00:01 19-02-2009
CheRt



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
если же хотите свой вариант, то правильно вызывайте функцию

Согласен, что так логичнее и конструкция в целом выглядит правильнее.
 
Однако меня немного интересует следующее: почему ИЕ и Опера кидают параметр без явного указания, а ФФ - нет? Какой из подходов правильнее.  
Но это так, теоретическое отступление.
 
ЗЫ: спасибо, очередной раз выручили

----------
В огне бода нет и не будет!
До встречи в СССР 2.0!

Всего записей: 1118 | Зарегистр. 14-12-2001 | Отправлено: 00:12 19-02-2009
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
CheRt

Цитата:
Однако меня немного интересует следующее: почему ИЕ и Опера кидают параметр без явного указания, а ФФ - нет?

за этим - к разработчикам

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 00:14 19-02-2009
klimusu



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день.
 
Написал небольшой код для странички, который создает новый textbox.
В IE все работает замечательно, а вот Opera и FF не хотят (хотя часть кода выполняется).
Проблемы возникают при создании самого элемента:
 
 
div1=document.getElementById("forgrid");
 
....
 
newnode1=document.createElement("span");
newnode1.innerHTML=newit;
div1.insertBefore(newnode1);
 
 
Подскажите как быть.

Всего записей: 931 | Зарегистр. 23-01-2006 | Отправлено: 14:19 11-05-2010
klimusu



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Написал небольшой код для странички, который создает новый textbox.
В IE все работает замечательно, а вот Opera и FF не хотят (хотя часть кода выполняется).
Проблемы возникают при создании самого элемента:
 
 
div1=document.getElementById("forgrid");
 
....
 
newnode1=document.createElement("span");
newnode1.innerHTML=newit;
div1.insertBefore(newnode1);
 
 
Подскажите как быть.

проблему решил заменим метод insertBefore на appendChild
 
div1.appendChild(newnode1);

Всего записей: 931 | Зарегистр. 23-01-2006 | Отправлено: 19:23 11-05-2010
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Интернет » Web-программирование » Mozilla Firefox и JavaScript events


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru