|
|
|
| Есть парачка файлов 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()}
.....
|
Так вот календарик не отображается пока не закомментировать первую строку приведённого выше скрипта. Подскажите откуда ростут ноги? | |
|
|
|
|
|
|
|
для: 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() демонстрирует ваш, извините, невысокий профессионализм. Это хорошо, что среди элементов формы всего ТРИ типа объектов - инпут, текстареа и селект. А если бы было ДВАДЦАТЬ разных типов, то что, ваша функция содержала бы ДВАДЦАТЬ одинаковых по сути строчек кода?
Неужто про вложенные циклы никогда не слышали? :-) | |
|
|
|
|
|
|
|
для: PAT
(27.02.2009 в 19:06)
| | Спасибо за подробный и содержательный ответ! Дело в том, что я совсем недавно начал познавать прелести JS. Странно что на локальном сервере у меня работала функция fFormsInit при отлючённом календаре, а на удалённом вообще никак не хочет(www.gezlev. ru/order.php)
Как быть? | |
|
|
|
|
|
|
|
для: Keyses
(28.02.2009 в 17:57)
| | Если честно - не знаю, как вам быть.
Я вовсе не понимаю, что именно у вас делает эта функция.
Извините уж :-)
Если хотите проверить, подключается ли эта функция, то пропишите в ней первой строкой тестовый | |
|
|
|