Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> return false в событии, Пожалуйста прокомментируйте 
:(
    Опции темы
Иль
Дата 20.4.2005, 01:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 544
Регистрация: 3.3.2005
Где: Москва

Репутация: 2
Всего: 14



Код

<html><head><meta http-equiv="Content-Type" content="text/html; charset=windows-1251"></head>
<body>
<input  checked id="check" type="checkbox">
<script language="JavaScript" type="text/JavaScript">
function MyFunction () {
ch=document.getElementById("check")
alert(ch.checked)
ch.checked=false
return false
}
document.getElementById("check").onclick=MyFunction;
</script>
</body></html>

Из разряда чужие ошибки хорошо, а свои лучше... протрезвляют и тонизируют.

Имеется функция, в которой меняется свойство checked checkbox`а и сразу используется прерывание через return. По привычке пишу всегда return false и поплатился

Описал событие inline (onClick=MyFunction()) - все работает, но мне этого мало.
Описал событие как метод (onclick=MyFunction) (больше никак не умею и недопонимаю smile ) и словил глюк. Сhecked меняется, но после возвращается в прежнее положение. Нечестно smile !

Поэтому теперь, пока наконец не пойму события, у меня новая привычка прерывать функции через return;

Это сообщение отредактировал(а) Иль - 20.4.2005, 01:40


--------------------
Ты виндусятник?... А я да. smile
PM MAIL ICQ Skype GTalk   Вверх
Иль
Дата 20.4.2005, 01:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 544
Регистрация: 3.3.2005
Где: Москва

Репутация: 2
Всего: 14



Увлекся smile
Ругаться не будете?
Просьба втолковать еще раз и "на пальцах", почему разное описание событий по разному себя ведет.
И что это токое сидит в событии при описании inline:
В ИЕ
Цитата
function anonymous() { MyFunction () }

В Геко
Цитата
function onclick(event) { MyFunction () }


Это сообщение отредактировал(а) Иль - 20.4.2005, 01:52


--------------------
Ты виндусятник?... А я да. smile
PM MAIL ICQ Skype GTalk   Вверх
Aliance
Дата 20.4.2005, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



Первый пост:
там не полный код дан, нельзя сказать однозначно.
Вообще, возврат boolean`а происходит, когда нужно отменить обычное поведение элемента, в котором записано событие.
Например
Код

<a href="www.sut.net.ru" onclick="alert('Уверены?')">переход</a>
<a href="www.sut.net.ru" onclick="alert('Уверены?'); return false">переход2</a>

При нажатии на первую ссылку появится alert окошко, затем после нажатия на кнопку ОК - оно исчезнет и произойдет переход по ссылке.
Если кликнуть по второй ссылке - то перехода не будет.

Второй пост:
не особо понял суть вопроса smile

ЗЫ: зайди на известную статью (если забыл - номер 1, см. мою подпись) и задавай вопросы там, что непонято именно...
PM MAIL WWW ICQ Skype   Вверх
Иль
Дата 20.4.2005, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 544
Регистрация: 3.3.2005
Где: Москва

Репутация: 2
Всего: 14



Aliance, виноват, думал это не совсем туда относится. Если можешь - перенеси. Ребяты, у меня натуги с этой статьей и событиями вообще. Не понимаю я ее, и отложил на потом.
Особенно это
Цитата
evt = (evt) ? evt : ((window.event) ? event : null )

Смотрю в книгу, вижу фигу smile
Надо будет распечатать и в метро по дороге вызубрить. Может тогда влезет smile

Теперь по теме. Перепроверил код - все работает, все полное.
Ударяем по checkbox и по событию там меняется checked=true на false (при клике чекбатон то тоже eже переключается на false), но из-за return false получаем в chekbox свойство cheked равное его состоянию до вызова события onclick, а должно быть false, тк мы его уже изменили. Получается дважды задается false, но всеравно, в итоге, получаем true в обоих браузерах.
Я так понимаю все происходит.

Это сообщение отредактировал(а) Иль - 20.4.2005, 14:05


--------------------
Ты виндусятник?... А я да. smile
PM MAIL ICQ Skype GTalk   Вверх
Aliance
Дата 20.4.2005, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



Цитата
evt = (evt) ? evt : ((window.event) ? event : null )

Что не понятного? Все просто. Есть в JavaScript, равно как и в других языках, сокращенный синтаксис. Тут он вложенный.
Код

evt = (evt) ? evt : ((window.event) ? event : null )
// равно этому:
evt;
if (evt) {
   evt = evt;
} else if (window.event) {
   evt = event;
} else {
   evt = null;
}


Цитата
Если можешь - перенеси

Куда?

Цитата
Не понимаю я ее, и отложил на потом.

А зря smile Полезная статья... Очень (я сам раньше ничего не понимал. Самое главное - осознать о наличии глобального объекта evt...) ЗЫ: задавай вопросы! Там!

PM MAIL WWW ICQ Skype   Вверх
Иль
Дата 20.4.2005, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 544
Регистрация: 3.3.2005
Где: Москва

Репутация: 2
Всего: 14



ОК!

А я собстна про evt и разницу в моделях и не понимаю. Но по теме этого топика тоже хочется понять


--------------------
Ты виндусятник?... А я да. smile
PM MAIL ICQ Skype GTalk   Вверх
Sardar
Дата 20.4.2005, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Смотрим на код:
Код
<input  checked id="check" type="checkbox">
<div id="debg"></div>
<script language="JavaScript" type="text/JavaScript">
dbg=document.getElementById("debg");

function MyFunction () {
  ch=document.getElementById("check");
  dbg.innerHTML+="click: "+ch.checked+"<br />"
//  ch.checked=false;
  return false;
}
document.getElementById("check").onclick=MyFunction;

document.getElementById("check").onmouseup=function() {
  ch=document.getElementById("check");
  dbg.innerHTML+="up: "+ch.checked+"<br />";
//  ch.checked=false;
  return false;
}
</script>

Думаем над результатами... Похоже вызывается mouseup с реальным состоянием чекбокса, затем вызывается click с инвертированным состоянием чекбокса. Изменение чекбокса в click не даёт результатов, это же в mouseup делает то что нужно.

Почему так? Пока не знаю... smile


Цитата
почему разное описание событий по разному себя ведет.
И что это токое сидит в событии при описании inline:

Какие разные события? Сорец функции в ИЕ и мозилле различается, т.к. в первом это анонимная функция, а во втором определяемая браузером, что кстати самому сделать не получится без eval. Допустим такой пример, где мы сами сделаем inline событие:
Код
<span id="test" onvingrad="this.style.background='#caa5f3'; this.innerHTML='<b>Vingrad</b>';">Test</span>

<script type="text/javascript">
<!--
var s=document.getElementById("test"), evs;
if((evs=s.getAttribute("onvingrad"))!=null) s.onvingrad=new Function("event", evs); //сорес обработчика
else s.onvingrad=null;

alert(s.onvingrad); //видим что это анонимная функция

var testevent=true; //для проверки
//событие: если мы загруженны с хоста винграда либо в тесте
if(s.onvingrad && (location.host.indexOf("vingrad")>=0 || testevent)) s.onvingrad();
//-->
</script>

Сразу оговоримся что в убогой Опере 6 new Function нет.
Как видим мы сделали собственное, по поведению полностью идеентичное как в ИЕ inline событие.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Иль
Дата 20.4.2005, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 544
Регистрация: 3.3.2005
Где: Москва

Репутация: 2
Всего: 14



Что такое Сорец/Сорес? И не нашел объяснение, что есть анонимная функция. Т.е. без имени, поэтому записывается в представлении как anonymouse?

Это сообщение отредактировал(а) Иль - 20.4.2005, 18:01


--------------------
Ты виндусятник?... А я да. smile
PM MAIL ICQ Skype GTalk   Вверх
Иль
Дата 20.4.2005, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 544
Регистрация: 3.3.2005
Где: Москва

Репутация: 2
Всего: 14



Цитата(Sardar @ 20.4.2005, 17:25)
Почему так? Пока не знаю...

smile Фраза снимает напряжение от трудового дня


--------------------
Ты виндусятник?... А я да. smile
PM MAIL ICQ Skype GTalk   Вверх
Aliance
Дата 20.4.2005, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



Цитата
Что такое Сорец/Сорес?

Исходный код

Цитата
И не нашел объяснение, что есть анонимная функция. Т.е. без имени

Сам дал ответ на свой вопрос smile
PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0520 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.