Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.07.2011, 10:29
Аватар для Viral
Профессор
Отправить личное сообщение для Viral Посмотреть профиль Найти все сообщения от Viral
 
Регистрация: 26.04.2011
Сообщений: 472

Error, почти 404
Написал вот код:

<!DOCTYPE HTML>
<html>
  <head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
  <script>
  window.onload=function(){
  var q = document.getElementsByName('q');
  for (var i=0; i < q.length; i++){
    if (q[i].innerHTML == '1'|'2'){
      document.getElementById('gofor').onclick=function(){
        alert ('не прокатило');
        }
      }
    else
      document.getElementById('gofor').onclick=function(){
        alert('прокатило');
      }
    }
  }
  </script>
  </head>
  <body>
  <a name="q">3</a><br>
  <a name="q">4</a><br>
  <a name="q">5</a><br>
  <a name="q">6</a><br>
  <a name="q">7</a><br>
  <input type="button" id="gofor" value="Тык">
  </body>
</html>



Проблема заключается в следующем: убрал из списка <a>, в которых были цифры 1 и 2, но скрипт все равно срабатывает так, будто они там присутствуют.

Подскажите, пожалуйста, где ошибка?

На выходе взависимости от присутствия определенных элементов внутри тегов <a></a> хотел сделать разные функции при клике на кнопку.

Спасибо за внимание.
Ответить с цитированием
  #2 (permalink)  
Старый 13.07.2011, 10:37
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

а нука, что даёт это?

var log=[];

// innerHTML
[ "3","4","5","6","7"].forEach( function( a ){ log.push( Boolean( a ==  '1'|'2' ) );  } )


alert( log.join(",") ) // все TRUE


ну, понятно, что ошибка на линии 9

Последний раз редактировалось melky, 13.07.2011 в 10:39.
Ответить с цитированием
  #3 (permalink)  
Старый 13.07.2011, 10:45
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,121

Viral, что это за условие такое?

q[i].innerHTML == '1'|'2'


Бивас, тест

if ('1' == '1'|'2') alert('1. Ok')
if ('2' == '1'|'2') alert('2. Ok')
if ('3' == '1'|'2') alert('3. Ok')

Последний раз редактировалось ksa, 13.07.2011 в 10:47.
Ответить с цитированием
  #4 (permalink)  
Старый 13.07.2011, 10:48
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Во первых, | - не ||.
Во-вторых, у побитовых операторов приоритет ниже, т.е. сначала получаем q[i].innerHTML == '1', а затем либо true|'2', либо false|'2'. Первое - это 3, второе - 2. Т.е. и то, и другое - true.
Ответить с цитированием
  #5 (permalink)  
Старый 13.07.2011, 10:49
Аватар для Viral
Профессор
Отправить личное сообщение для Viral Посмотреть профиль Найти все сообщения от Viral
 
Регистрация: 26.04.2011
Сообщений: 472

эм...если я правильно понял то, что я сделал, то это для всех q из получившегося массива, равных 1 или 2 выполняется .....

поправьте, пожалуйста, если я ошибся...
Ответить с цитированием
  #6 (permalink)  
Старый 13.07.2011, 10:49
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,121

Viral, зачем в условии используется побитовый оператор?

Цитата:
Побитовое ИЛИ (OR)
a | b
Ставит 1 для каждого бита результата, для которого хотя бы один из соответствующих битов операндов равен 1.
Ответить с цитированием
  #7 (permalink)  
Старый 13.07.2011, 10:52
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,121

Сообщение от Viral
поправьте, пожалуйста, если я ошибся...
Вот какое условие тебе нужно

if (q[i].innerHTML == '1' || q[i].innerHTML == '2') {...}
Ответить с цитированием
  #8 (permalink)  
Старый 13.07.2011, 10:57
Аватар для Viral
Профессор
Отправить личное сообщение для Viral Посмотреть профиль Найти все сообщения от Viral
 
Регистрация: 26.04.2011
Сообщений: 472

Понял, в чем ошибка, но как исправить не знаю, подскажите, пожалуйста...

Ошибка в том, что скрипт добавляет onclick в инпут в зависимости от того, какой последний элемент массива.

Что необходимо исправить, чтобы функция при наличии определенных элементов в массиве срабатывала независимо от их положения в нем?

Последний раз редактировалось Viral, 13.07.2011 в 11:23.
Ответить с цитированием
  #9 (permalink)  
Старый 13.07.2011, 11:20
Аватар для trikadin
Модератор
Отправить личное сообщение для trikadin Посмотреть профиль Найти все сообщения от trikadin
 
Регистрация: 27.04.2010
Сообщений: 3,417

Сообщение от Viral
Подставил это условие, скрипт заработал абсолютно противоположно...
дает то, что написано в else независимо от того, что написано в <a>
Попробуйте убрать всё, кроме 1 и 2)
__________________
Читайте:
Ты любопытный) Всё-таки, ничему в этом мире не помешает хорошая доля юмора)
Как спросить, чтобы вам ответили
Часто Задаваемые Вопросы (FAQ)
Ответить с цитированием
  #10 (permalink)  
Старый 13.07.2011, 11:24
Аватар для trikadin
Модератор
Отправить личное сообщение для trikadin Посмотреть профиль Найти все сообщения от trikadin
 
Регистрация: 27.04.2010
Сообщений: 3,417

<!DOCTYPE HTML>
<html>
  <head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
  <script>
  window.onload=function(){
  var q = document.getElementsByName('q');
  for (var i=0; i < q.length; i++){
    if (q[i].innerHTML == '1'|| q[i].innerHTML =='2'){
      document.getElementById('gofor').onclick=function(){
        alert ('не прокатило');
      };
      return;
    };
  };
  document.getElementById('gofor').onclick=function() {alert("Прокатило")};
}
  </script>
  </head>
  <body>
  <a name="q">3</a><br>
  <a name="q">4</a><br>
  <a name="q">5</a><br>
  <a name="q">6</a><br>
  <a name="q">7</a><br>
  <input type="button" id="gofor" value="Тык">
  </body>
</html>


<!DOCTYPE HTML>
<html>
  <head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
  <script>
  window.onload=function(){
  var q = document.getElementsByName('q');
  for (var i=0; i < q.length; i++){
    if (q[i].innerHTML == '1'|| q[i].innerHTML =='2'){
      document.getElementById('gofor').onclick=function(){
        alert ('не прокатило');
      };
      return;
    };
  };
  document.getElementById('gofor').onclick=function() {alert("Прокатило")};
}
  </script>
  </head>
  <body>
  <a name="q">1</a><br>
  <a name="q">2</a><br>
  <a name="q">3</a><br>
  <a name="q">4</a><br>
  <a name="q">5</a><br>
  <a name="q">6</a><br>
  <a name="q">7</a><br>
  <input type="button" id="gofor" value="Тык">
  </body>
</html>
__________________
Читайте:
Ты любопытный) Всё-таки, ничему в этом мире не помешает хорошая доля юмора)
Как спросить, чтобы вам ответили
Часто Задаваемые Вопросы (FAQ)

Последний раз редактировалось trikadin, 13.07.2011 в 11:27.
Ответить с цитированием
Ответ


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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ЧПУ и статус 404 cuberboy Серверные языки и технологии 2 08.06.2011 16:12
Загрузка скрипта по ошибке 404 ikarushka Общие вопросы Javascript 10 28.11.2010 04:26