Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Error, почти 404 (https://javascript.ru/forum/dom-window/18723-error-pochti-404-a.html)

Viral 13.07.2011 10:29

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> хотел сделать разные функции при клике на кнопку.

Спасибо за внимание. :thanks:

melky 13.07.2011 10:37

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

var log=[];

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


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


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

ksa 13.07.2011 10:45

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

Sweet 13.07.2011 10:48

Во первых, | - не ||.
Во-вторых, у побитовых операторов приоритет ниже, т.е. сначала получаем q[i].innerHTML == '1', а затем либо true|'2', либо false|'2'. Первое - это 3, второе - 2. Т.е. и то, и другое - true.

Viral 13.07.2011 10:49

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

поправьте, пожалуйста, если я ошибся...

ksa 13.07.2011 10:49

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

Цитата:

Побитовое ИЛИ (OR)
a | b
Ставит 1 для каждого бита результата, для которого хотя бы один из соответствующих битов операндов равен 1.

ksa 13.07.2011 10:52

Цитата:

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

Вот какое условие тебе нужно

if (q[i].innerHTML == '1' || q[i].innerHTML == '2') {...}

Viral 13.07.2011 10:57

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

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

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

trikadin 13.07.2011 11:20

Цитата:

Сообщение от Viral
Подставил это условие, скрипт заработал абсолютно противоположно...
дает то, что написано в else независимо от того, что написано в <a>

Попробуйте убрать всё, кроме 1 и 2)

trikadin 13.07.2011 11:24

<!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>


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