28.05.2015, 13:02
|
Интересующийся
|
|
Регистрация: 25.05.2015
Сообщений: 24
|
|
Скрипты в java.js перестают работать.
Добрый день, друзья!
У меня порядка 6-10 простеньких калькуляторов, некоторые из которых с зависимыми селектами. В будущем размещаться калькуляторы будут на одной странице, а скрипты к ним размещаться в "java.js".
Столкнулся с такой проблемой:
Когда все скрипты положены в одном файле("java.js"), зависимости перестают работать.
В чем может быть дело? И вообще правильно ли так делать?
Возможно в моем случае лучше выкладывать все скрипты к калькуляторам в отдельный файл или может вовсе прописывать в той же form-е?
У всех калькуляторов нет совпадающих id и name, на которые ссылаются скрипты.
Сейчас: общий файл "java.js" и отдельные html-страницы(калькулятор1, калькулятор2).
Что бы работал: делаю отдельный файл "js_cal1.js" для определенного калькулятора, поскольку из общего файла не работают корректно.
Прошу помощи .
|
|
28.05.2015, 13:21
|
Профессор
|
|
Регистрация: 23.10.2010
Сообщений: 2,718
|
|
Сообщение от oneplus
|
В чем может быть дело?
|
Кашпировский отошел от практики.
|
|
28.05.2015, 13:22
|
Профессор
|
|
Регистрация: 23.10.2010
Сообщений: 2,718
|
|
Зачем вообще вам эти файлы? Постите скрипты в хтмле сразу после хтмля и не парьтесь кактусом.
|
|
28.05.2015, 13:25
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
oneplus,
нужен код
|
|
28.05.2015, 14:15
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
oneplus,
забыли бы вы о кодировке 1251 было бы проще, освоили бы консоль было бы ещё проще
где на вашей странице bsize_sel = document.getElementById("ban_size_id"), элемент с таким id? строка 43 пост 6
|
|
28.05.2015, 14:18
|
Профессор
|
|
Регистрация: 23.10.2010
Сообщений: 2,718
|
|
А, понятно, это эпическое продолжение усилий хардкорного РА наладить сайт по наружке.
Так делают колхозники не бывавшие в Смольном:
switch (a.lb_surface.selectedIndex) {
case 0: surface=1030; break;
case 1: surface=2120; break;
case 2: surface=660; break;
case 3: surface=0; break;
case 4: surface=1090; break;
Так делают люди на заводах:
<option s="1030">Лабуда1</option>
<option s="2120">Лабуда2</option>
<option s="660">Лабуда3</option>
<option s="0">Лабуда4</option>
<option s="1090">Лабуда5</option>
Если надо больше параметров - забивают сколько надо, алфавит - 23 буквы, это если по одной для экономии трафа юзать.
Затем вместо switch (a.lb_surface.selectedIndex) пишут
var surface = a.lb_surface.options[a.lb_surface.selectedIndex].getAttribute('s');
И все. То есть не все, а вот если все переделать нормально, то роня проронит слезу.
Последний раз редактировалось kostyanet, 28.05.2015 в 14:21.
|
|
28.05.2015, 14:55
|
Интересующийся
|
|
Регистрация: 25.05.2015
Сообщений: 24
|
|
Сообщение от рони
|
oneplus,
забыли бы вы о кодировке 1251 было бы проще, освоили бы консоль было бы ещё проще
где на вашей странице bsize_sel = document.getElementById("ban_size_id"), элемент с таким id? строка 43 пост 6
|
Это калькулятор баннера, а страница хтмл(5 пост) - это калькулятор широкоформатной печати (пока калькуляторы отдельно по страницам).
6-ой пост это общий файл "java.js",
5-ый пост страница хтмл "широкоформатная печать" и скрипт к печати, который корректно работает только если поместить отдельно в java.js в единственном экземпляре. В сборе со всеми скриптами не работает.
После удаления на странице: <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
Теперь широкоформатная печать с чекбоксами работает.
Не прописанная кодировка на хтмл странице критично?
Удалил кодировку на всех неработающих страницах, по прежнему не работает Световые короба. Не удаляется селект. Тот самый)
С отдельным фалом js работает.
Последний раз редактировалось oneplus, 28.05.2015 в 16:05.
|
|
28.05.2015, 15:05
|
Профессор
|
|
Регистрация: 23.10.2010
Сообщений: 2,718
|
|
Кроме того есть json и при желании сделать все без привязки к элементам заводские делают так:
foo={
surfaces:[1030,2120,660,0,1090],
/* тут вся остальная бд */
};
var surface=foo.surfaces[a.lb_surface.selectedIndex];
Но возникает вопрос. Откуда тогда берется хтмл в качестве интерфейса? Должны быть данные, по которым делается рендер. Когда он делается возникает соблазн натыкать в хтмл все необходимые и связанные с выбором юзера данные, чтоб не дублировать их в переменных, ибо получится двойная работа.
Так и делают. Забивают хтмл данными и забирают их по обстоятельствам и по выбору. Либо в пресловутые data- теги, толку с которых как с козла сгущенного молока, либо в любые не занятые атрибуты как это делает всеми любимый JQuery кстати.
|
|
28.05.2015, 15:08
|
Профессор
|
|
Регистрация: 23.10.2010
Сообщений: 2,718
|
|
Сообщение от oneplus
|
С отдельным фалом js работает.
|
Ну вам же человек roni написал что надо открыть консоль скрипта и увидеть там ошибки обращения к несуществующим элементам.
Вы ж ничего не проверяете как самый настоящий селянин. Когда вы собрали все скрипты в кучу для всех страниц, то коню ясно - надо проверять есть ли соответствующий и нужный конкретному скрипту элемент на _этой_ странице и, если есть - запускать процесс, а если нет - пропускать.
|
|
28.05.2015, 15:10
|
Интересующийся
|
|
Регистрация: 25.05.2015
Сообщений: 24
|
|
Сообщение от kostyanet
|
А, понятно, это эпическое продолжение усилий хардкорного РА наладить сайт по наружке.
Если надо больше параметров - забивают сколько надо, алфавит - 23 буквы, это если по одной для экономии трафа юзать.
Затем вместо switch (a.lb_surface.selectedIndex) пишут
var surface = a.lb_surface.options[a.lb_surface.selectedIndex].getAttribute('s');
И все. То есть не все, а вот если все переделать нормально, то роня проронит слезу.
|
Впервые слышу getAttribute('s'), обязательно учту, и рад бы написать "неколхозный" код, да не бывает все сразу.
|
|
|
|