Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Скрипты в java.js перестают работать. (https://javascript.ru/forum/dom-window/56066-skripty-v-java-js-perestayut-rabotat.html)

oneplus 28.05.2015 13:02

Скрипты в java.js перестают работать.
 
Добрый день, друзья!
У меня порядка 6-10 простеньких калькуляторов, некоторые из которых с зависимыми селектами. В будущем размещаться калькуляторы будут на одной странице, а скрипты к ним размещаться в "java.js".
Столкнулся с такой проблемой:
Когда все скрипты положены в одном файле("java.js"), зависимости перестают работать.
В чем может быть дело? И вообще правильно ли так делать?
Возможно в моем случае лучше выкладывать все скрипты к калькуляторам в отдельный файл или может вовсе прописывать в той же form-е?

У всех калькуляторов нет совпадающих id и name, на которые ссылаются скрипты.

Сейчас: общий файл "java.js" и отдельные html-страницы(калькулятор1, калькулятор2).
Что бы работал: делаю отдельный файл "js_cal1.js" для определенного калькулятора, поскольку из общего файла не работают корректно.

Прошу помощи:help: .

kostyanet 28.05.2015 13:21

Цитата:

Сообщение от oneplus
В чем может быть дело?

Кашпировский отошел от практики.

kostyanet 28.05.2015 13:22

Зачем вообще вам эти файлы? Постите скрипты в хтмле сразу после хтмля и не парьтесь кактусом.

рони 28.05.2015 13:25

oneplus,
нужен код

рони 28.05.2015 14:15

oneplus,
забыли бы вы о кодировке 1251 было бы проще, освоили бы консоль было бы ещё проще

где на вашей странице bsize_sel = document.getElementById("ban_size_id"), элемент с таким id? строка 43 пост 6

kostyanet 28.05.2015 14:18

А, понятно, это эпическое продолжение усилий хардкорного РА наладить сайт по наружке.

Так делают колхозники не бывавшие в Смольном:

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');

И все. То есть не все, а вот если все переделать нормально, то роня проронит слезу.

oneplus 28.05.2015 14:55

Цитата:

Сообщение от рони (Сообщение 372904)
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 работает.

kostyanet 28.05.2015 15:05

Кроме того есть json и при желании сделать все без привязки к элементам заводские делают так:

foo={
    surfaces:[1030,2120,660,0,1090],
    /* тут вся остальная бд */
};

var surface=foo.surfaces[a.lb_surface.selectedIndex];


Но возникает вопрос. Откуда тогда берется хтмл в качестве интерфейса? Должны быть данные, по которым делается рендер. Когда он делается возникает соблазн натыкать в хтмл все необходимые и связанные с выбором юзера данные, чтоб не дублировать их в переменных, ибо получится двойная работа.

Так и делают. Забивают хтмл данными и забирают их по обстоятельствам и по выбору. Либо в пресловутые data- теги, толку с которых как с козла сгущенного молока, либо в любые не занятые атрибуты как это делает всеми любимый JQuery кстати.

kostyanet 28.05.2015 15:08

Цитата:

Сообщение от oneplus
С отдельным фалом js работает.

Ну вам же человек roni написал что надо открыть консоль скрипта и увидеть там ошибки обращения к несуществующим элементам.

Вы ж ничего не проверяете как самый настоящий селянин. Когда вы собрали все скрипты в кучу для всех страниц, то коню ясно - надо проверять есть ли соответствующий и нужный конкретному скрипту элемент на _этой_ странице и, если есть - запускать процесс, а если нет - пропускать.

oneplus 28.05.2015 15:10

Цитата:

Сообщение от kostyanet (Сообщение 372905)
А, понятно, это эпическое продолжение усилий хардкорного РА наладить сайт по наружке.

Если надо больше параметров - забивают сколько надо, алфавит - 23 буквы, это если по одной для экономии трафа юзать.

Затем вместо switch (a.lb_surface.selectedIndex) пишут

var surface = a.lb_surface.options[a.lb_surface.selectedIndex].getAttribute('s');

И все. То есть не все, а вот если все переделать нормально, то роня проронит слезу.

Впервые слышу getAttribute('s'), обязательно учту, и рад бы написать "неколхозный" код, да не бывает все сразу.


Часовой пояс GMT +3, время: 11:11.