Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: конфликт между двумя яваскриптами
 
 автор: Keyses   (27.02.2009 в 18:10)   письмо автору
 
 

Есть парачка файлов JS, так вот один отвечает за мгновенное отоброжение статуса валидации в форме:
window.onload= function () {setInterval('fFormsInit()',1000);}

function $t (tag, el) {
    if (!el) el= document;
    return el.getElementsByTagName(tag);
}

function fFormsInit() {
    for (var i=0, els=$t('input'); i<els.length; i++) if (els[i].onchange) els[i].onchange();
    for (var i=0, els=$t('textarea'); i<els.length; i++) if (els[i].onchange) els[i].onchange();
    for (var i=0, els=$t('select'); i<els.length; i++) if (els[i].onchange) els[i].onchange();
    
}


А второй отвечает за отображение календарика по определённому событию:
window.onload = function(){bscal.init()}
.....

Так вот календарик не отображается пока не закомментировать первую строку приведённого выше скрипта. Подскажите откуда ростут ноги?

  Ответить  
 
 автор: PAT   (27.02.2009 в 19:06)   письмо автору
 
   для: Keyses   (27.02.2009 в 18:10)
 

Те, кто служил в армии, чётко знает, что, согласно Устава, ВСЕГДА следует исполнять только САМЫЙ ПОСЛЕДНИЙ приказ.

А вот то, кто придумал HTML, в армии, видимо, не служил, поэтому HTML-код ориентируется на ПЕРВЫЙ приказ и игнорирует все последующие.

Пример для HTML:
<table  border="1" cellpadding="10" border="0">
<tr><td>Бордер БУДЕТ, хотя он впоследствии отменён</td></tr></table>


А вот в Javasript'e и в CSS, как и в армии, ВСЕГДА исполняется САМАЯ ПОСЛЕДНЯЯ ИНСТРУКЦИЯ.

Пример для CSS:
<style>
p {color: red}
p {color: blue}
</style>
<p>Текст будет СИНИМ</p>

Пример для Javasript'a:
<script>
window.onload = function () {alert ('НИКОГДА НЕ СРАБОТАЕТ, ибо отменён следующим "приказом"')}
window.onload = function () {alert ('СРАБОТАЕТ только ЭТОТ АЛЕРТ, ибо это - ПОСЛЕДНЯЯ инструкция')}
</script>
----------------------

В вашем случае никакого конфликта нет. Просто второе назначение функции отменяет первое.
Вам надо просто вызов функции bscal.init() прописать как последнюю строчку функции fFormsInit().


PS. И ещё, в обоих случаях: и при назначении окну по событию окончания загрузки функции fFormsInit(), и при назначении окну по событию окончания загрузки функции bscal.init() вы сделали одну и ту же ошибку. Вернее, даже не ошибку, а проявили незнание основ синтаксиса Javasript'a.
При назначении функции без передачи в неё параметров ДОСТАТОЧНЫМ будет просто указать имя этой функции. Т.е. ПРАВИЛЬНЫМИ будут следующие записи:
window.onload= function () {setInterval(fFormsInit,1000)} //безо всяких кавычек и круглых скобок
и
window.onload = bscal.init; //и без оформления лишней функции и без круглых скобок


PS2. Да и написание вами функции fFormsInit() демонстрирует ваш, извините, невысокий профессионализм. Это хорошо, что среди элементов формы всего ТРИ типа объектов - инпут, текстареа и селект. А если бы было ДВАДЦАТЬ разных типов, то что, ваша функция содержала бы ДВАДЦАТЬ одинаковых по сути строчек кода?
Неужто про вложенные циклы никогда не слышали? :-)

  Ответить  
 
 автор: Keyses   (28.02.2009 в 17:57)   письмо автору
 
   для: PAT   (27.02.2009 в 19:06)
 

Спасибо за подробный и содержательный ответ! Дело в том, что я совсем недавно начал познавать прелести JS. Странно что на локальном сервере у меня работала функция fFormsInit при отлючённом календаре, а на удалённом вообще никак не хочет(www.gezlev. ru/order.php)
Как быть?

  Ответить  
 
 автор: PAT   (01.03.2009 в 01:29)   письмо автору
 
   для: Keyses   (28.02.2009 в 17:57)
 

Если честно - не знаю, как вам быть.
Я вовсе не понимаю, что именно у вас делает эта функция.
Извините уж :-)

Если хотите проверить, подключается ли эта функция, то пропишите в ней первой строкой тестовый
alert ('Подключена!')

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования