Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 28.01.2013, 11:54
Новичок на форуме
Отправить личное сообщение для oliverair Посмотреть профиль Найти все сообщения от oliverair
 
Регистрация: 28.01.2013
Сообщений: 7

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>
Ответить с цитированием
  #2 (permalink)  
Старый 28.01.2013, 13:20
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Принцип DRY во всей красе ))
Ответить с цитированием
  #3 (permalink)  
Старый 28.01.2013, 13:36
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

oliverair,
похоже глюк GoogleChrome ... добавьте после формы или в window.onload этот код
<script  type="text/javascript">
window.addEventListener && (document.getElementsByName('zakaz')[0].addEventListener('change', calccash , false));
</script>
Ответить с цитированием
  #4 (permalink)  
Старый 28.01.2013, 16:58
Новичок на форуме
Отправить личное сообщение для oliverair Посмотреть профиль Найти все сообщения от oliverair
 
Регистрация: 28.01.2013
Сообщений: 7

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

рони
Благодарю за совет. Помогло.
Ответить с цитированием
  #5 (permalink)  
Старый 28.01.2013, 17:13
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

oliverair,
Сообщение от oliverair
Вопрос: если я спихну реагирование на отдельную функцию, код может заработать на GC?
у вас же и так отдельная функция? и как это может изменить глюк???
Ответить с цитированием
  #6 (permalink)  
Старый 28.01.2013, 17:16
Новичок на форуме
Отправить личное сообщение для oliverair Посмотреть профиль Найти все сообщения от oliverair
 
Регистрация: 28.01.2013
Сообщений: 7

рони

я имею ввиду что оператор case будет вызывать дополнительную функцию, которая в зависимости от параметров будет добавлять необходимую строчку (без copy-past, как сделано сейчас)
Ответить с цитированием
  #7 (permalink)  
Старый 28.01.2013, 17:27
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

oliverair,
GoogleChrome не нравится это <form name="zakaz" method="post" onchange="calccash()"> а ваш код вполне рабочий, но может быть лучше )))
Ответить с цитированием
  #8 (permalink)  
Старый 28.01.2013, 17:31
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Чем ему не нравится это?
Ответить с цитированием
  #9 (permalink)  
Старый 28.01.2013, 17:43
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

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>
Ответить с цитированием
  #10 (permalink)  
Старый 28.01.2013, 18:09
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Я не спорю. Просто не пойму что не так то?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Chrome не видит DOM подключаемого SVG через iframe FINoM Events/DOM/Window 10 10.06.2014 14:23
Новый элемент отсутствует в DOM модели StrSprut jQuery 4 19.09.2011 12:50
Получить размеры рабочей области окна в Chrome unclechu Events/DOM/Window 1 13.09.2011 02:37
тег <audio> в Opera, Chrome, Firefox Magneto Javascript под браузер 12 25.11.2010 15:12
Не изменяется DOM после назначения класса css в Chrome khusamov Общие вопросы Javascript 5 22.03.2010 20:45