Javascript-форум (https://javascript.ru/forum/)
-   Opera, Safari и др. (https://javascript.ru/forum/css-html-browser/)
-   -   Chrome и DOM (https://javascript.ru/forum/css-html-browser/35016-chrome-i-dom.html)

oliverair 28.01.2013 11:54

Chrome и DOM
 
Есть простой JS но в GoogleChrome этот скрипт отказывается работать (консоль молчит, ошибки отсутствуют). Opera и Mozila отрабатывают скрипт отлично. Я вижу два варианта проблемы или в обращении к тегам (zakaz.type.value) или в "document.getElementById" но решить проблему не знаю как.

сам скрипт
function calccash()
{
t=0;
i=0;
d=0;
 switch(zakaz.type.value){
 case "a": {t=35; document.getElementById('alert').innerHTML = 'Пожалуйста, выберите тип интерактивности.';} break;
 case "b": {t=60; document.getElementById('alert').innerHTML = 'Пожалуйста, выберите тип интерактивности.';} break;
 case "c": {t=60; document.getElementById('alert').innerHTML = 'Пожалуйста, выберите тип интерактивности.';} break;
 case "d": {t=35; document.getElementById('alert').innerHTML = 'Пожалуйста, выберите тип интерактивности.';} break;
 default: document.getElementById('alert1').innerHTML = 'Выберите тип сайта'; break;
 }
  switch(zakaz.interactive.value){
 case "a": {i=0; document.getElementById('alert').innerHTML = 'Пожалуйста, выберите дизайн';} break;
 case "b": {i=10; document.getElementById('alert').innerHTML = 'Пожалуйста, выберите дизайн';} break;
 case "c": {i=30; document.getElementById('alert').innerHTML = 'Пожалуйста,выберите дизайн';} break;
 default: document.getElementById('alert1').innerHTML = 'Выберите интерактивность '; break;
 }
   switch(zakaz.design.value){
 case "a": {d=0; document.getElementById('alert').innerHTML = 'Пожалуйста, выберите тип обслуживания';} break;
 case "b": {d=30; document.getElementById('alert').innerHTML = 'Пожалуйста, выберите тип обслуживания';} break;
 default: document.getElementById('alert1').innerHTML = ''; break;
 }
    switch(zakaz.support.value){
 case "a": {document.getElementById('mprice').innerHTML = '';  document.getElementById('alert').innerHTML = 'Сделаем заказ?';} break;
 case "b": {document.getElementById('mprice').innerHTML = 'Ежемесечная поддержка от 10$'; document.getElementById('alert').innerHTML = 'Сделаем заказ?';} break;
 case "c": {document.getElementById('mprice').innerHTML = 'Ежемесечная поддержка от 30$'; document.getElementById('alert').innerHTML = 'Сделаем заказ?';} break;
 default: document.getElementById('mprice').innerHTML = ''; break;
 }
  document.getElementById('price').innerHTML = t+i+d+' y.e.';
}


который обрабатывает форму:
<form name="zakaz" method="post" onchange="calccash()">
<br />Тип сайта:
<select name="type" id="c1">
<option value="">ВЫБЕРИТЕ</option>
<option value="a">Сайт-визитка</option>
<option value="b">Портал</option>
<option value="c">Веб-магазин</option>
<option value="d">Форум</option>
</select>
<br />Интерактивность:
<select name="interactive"id="c2">
<option value="">ВЫБЕРИТЕ</option>
<option value="a">Статический сайт</option>
<option value="b">Динамический сайт на готовом движке</option>
<option value="c">Динамический сайт на собственном движке</option>
</select>
<br />Дизайн:
<select name="design" id="c3">
<option value="">ВЫБЕРИТЕ</option>
<option value="a">Шаблон</option>
<option value="b">Индивидуальный дизайн</option>
</select>
<br />Поддержка:
<select name="support" id="c4">
<option value="">ВЫБЕРИТЕ</option>
<option value="a">Сайт не требует поддержки </option>
<option value="b">Сайт требует постоянного обновления</option>
<option value="c">Сайт со временем, потребует изменение функционала  </option>
</select>
</form>

danik.js 28.01.2013 13:20

Принцип DRY во всей красе ))

рони 28.01.2013 13:36

oliverair,
похоже глюк GoogleChrome ... добавьте после формы или в window.onload этот код
<script  type="text/javascript">
window.addEventListener && (document.getElementsByName('zakaz')[0].addEventListener('change', calccash , false));
</script>

oliverair 28.01.2013 16:58

danik.js
Я быдлокодер, да.
Вопрос: если я спихну реагирование на отдельную функцию, код может заработать на GC?

рони
Благодарю за совет. Помогло.

рони 28.01.2013 17:13

oliverair,
Цитата:

Сообщение от oliverair
Вопрос: если я спихну реагирование на отдельную функцию, код может заработать на GC?

у вас же и так отдельная функция? и как это может изменить глюк???

oliverair 28.01.2013 17:16

рони

я имею ввиду что оператор case будет вызывать дополнительную функцию, которая в зависимости от параметров будет добавлять необходимую строчку (без copy-past, как сделано сейчас)

рони 28.01.2013 17:27

oliverair,
GoogleChrome не нравится это <form name="zakaz" method="post" onchange="calccash()"> а ваш код вполне рабочий, но может быть лучше )))

danik.js 28.01.2013 17:31

Чем ему не нравится это?

рони 28.01.2013 17:43

danik.js,наверно слишком быстрый незамечает )))
<!DOCTYPE HTML>
<html>

<head>
<meta charset="utf-8" />
  <title></title>
</head>

<body>
<script type="text/javascript">
function calccash()
{
alert("test")
}
</script>

<form   name="zakaz" method="post"    onchange="calccash()" >
<br />Тип сайта:
<select name="type" id="c1">
<option value="">ВЫБЕРИТЕ</option>
<option value="a">Сайт-визитка</option>
<option value="b">Портал</option>
<option value="c">Веб-магазин</option>
<option value="d">Форум</option>
</select>
<br />Интерактивность:
<select name="interactive"id="c2">
<option value="">ВЫБЕРИТЕ</option>
<option value="a">Статический сайт</option>
<option value="b">Динамический сайт на готовом движке</option>
<option value="c">Динамический сайт на собственном движке</option>
</select>
<br />Дизайн:
<select name="design" id="c3">
<option value="">ВЫБЕРИТЕ</option>
<option value="a">Шаблон</option>
<option value="b">Индивидуальный дизайн</option>
</select>
<br />Поддержка:
<select name="support" id="c4">
<option value="">ВЫБЕРИТЕ</option>
<option value="a">Сайт не требует поддержки </option>
<option value="b">Сайт требует постоянного обновления</option>
<option value="c">Сайт со временем, потребует изменение функционала  </option>
</select>
</form>

<script  type="text/javascript">
//window.addEventListener && (document.getElementsByName('zakaz')[0].addEventListener('change', calccash , false));
</script>
</body>
</html>

danik.js 28.01.2013 18:09

Я не спорю. Просто не пойму что не так то?


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