Записки самоучки

Август 10, 2006

onchange и onclick в Опере, ИЕ, Лисе

Filed under: Броузеры,Глюки,JavaScript — 4matic @ 3:45 пп

Как обычно порадовали DOMа. Работаю с элементами checkbox:

var tcb=0;//кол-во чекбоксов c true (глобальная)
function c(obj)
{
   if (obj.checked)
   {
      tcb++;
   }
   else
   {
      tcb--;
   }
   if (nr == tcb) 
   { 
      document.getElementById('allcb').checked = true; 
   } 
   else 
   { 
       if (0 == tcb) 
       { 
          document.getElementById('allcb').checked = false; 
       } 
   }
}

Так вот, событие onchange() для данного объекта есть в Лисе и Опере. В ИЕ данного события для объекта типа нет. Вернее что-то есть, но событием назвать это сложно.

Броузер иногда отрабатывает функцию-обработчик события. Да-да именно иногда, т.е. какого-то четкого поведения мною обнаружено не было. Причину такого поведения — я объяснить не могу.

Решение проблемы — перейти на событие onclick(), которое отлично работает во всех трех клиентах.

Версии клиентов: Opera 9.01, FF 1.5.06, IE6. Windows XP SP2

8 комментариев »

  1. А DOCTYPE с нужным dtd пробывали указывать в ИЕ? ИЕ без указания спецификации — вообще ведет себя так, как ему вздумается, и все остальные обозреватели тоже. Событие onchange — прекрасно работает во всех обозревателях при loses.dtd.

    комментарий от XPraptor — Февраль 18, 2007 @ 5:33 пп

  2. DOCTYPE — это отдельная тема для беседы. Я сейчас не помню, какой DOCTYPE использовал, но, скорее всего loose.dtd и использовал.

    комментарий от 4matic — Февраль 21, 2007 @ 9:57 дп

  3. насчет события onClick в опере:
    на страничке есть див, который надо показывать по нажатию на ссылку. то есть «развернуть форму» — форма разворачивается.
    изначально у дива стоит display:none, по онклику скриптом ставится display:block.
    в ие и фоксе все прекрасно работает, а вот опера капризничает. она на время показывает этот див, но тут же его скрывает. и в полученном коде страницы стоит все тот же display:none. как это исправить?

    комментарий от eva — Март 30, 2007 @ 3:35 пп

  4. Думаю, что проблема не в Опере, а в коде. Без кода страницы гадать на кофейной гуще бесполезно. Опера достаточно жесткая по требованиям к коду.

    комментарий от 4matic — Март 30, 2007 @ 5:01 пп

  5. большое спасибо, проблему кривых рук уже решила =)

    комментарий от eva — Апрель 5, 2007 @ 6:18 пп

  6. У меня событие onchange в случае с checkbox-ами срабатывает только после после потери фокуса checkbox-а. В ИЕ6

    комментарий от Лена — Май 29, 2007 @ 2:30 пп

  7. Когда же Вы посмотрите в сторону стандартов???
    Нет такого события onchange для input type=»checkbox».
    Сдается мне, что статьи здесь написаны новичком или дилетантом…

    P.S. Купите хорошие книжки по JS

    комментарий от Петров — Сентябрь 26, 2007 @ 11:37 пп

  8. В документации по HTML событие onchange «привязано» к INPUT. В доке по DOM — нет. В той ситуации логичнее было вызывать функцию по событию ИЗМЕНЕНИЯ значения, а не по клику.

    P.S. Документация всегда штудируется, когда возникают спорные моменты. Другой вопрос — моя хроническая невнимательность.

    P.P.S. Я не называю себя ГУРУ. Есть желание учиться и понимать, что я и стараюсь делать. Спасибо вам за конструктивные подсказки.

    комментарий от 4matic — Сентябрь 27, 2007 @ 9:42 дп


RSS feed for comments on this post. TrackBack URI

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

Создайте бесплатный сайт или блог на WordPress.com.

%d такие блоггеры, как: