13.07.2011, 10:29
|
|
Профессор
|
|
Регистрация: 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> хотел сделать разные функции при клике на кнопку.
Спасибо за внимание.
|
|
13.07.2011, 10:37
|
sinistral
|
|
Регистрация: 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.
|
|
13.07.2011, 10:45
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,205
|
|
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.
|
|
13.07.2011, 10:48
|
Профессор
|
|
Регистрация: 16.03.2010
Сообщений: 1,618
|
|
Во первых, | - не ||.
Во-вторых, у побитовых операторов приоритет ниже, т.е. сначала получаем q[i].innerHTML == '1', а затем либо true|'2', либо false|'2'. Первое - это 3, второе - 2. Т.е. и то, и другое - true.
|
|
13.07.2011, 10:49
|
|
Профессор
|
|
Регистрация: 26.04.2011
Сообщений: 472
|
|
эм...если я правильно понял то, что я сделал, то это для всех q из получившегося массива, равных 1 или 2 выполняется .....
поправьте, пожалуйста, если я ошибся...
|
|
13.07.2011, 10:49
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,205
|
|
Viral, зачем в условии используется побитовый оператор?
Цитата:
|
Побитовое ИЛИ (OR)
a | b
Ставит 1 для каждого бита результата, для которого хотя бы один из соответствующих битов операндов равен 1.
|
|
|
13.07.2011, 10:52
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,205
|
|
Сообщение от Viral
|
поправьте, пожалуйста, если я ошибся...
|
Вот какое условие тебе нужно
if (q[i].innerHTML == '1' || q[i].innerHTML == '2') {...}
|
|
13.07.2011, 10:57
|
|
Профессор
|
|
Регистрация: 26.04.2011
Сообщений: 472
|
|
Понял, в чем ошибка, но как исправить не знаю, подскажите, пожалуйста...
Ошибка в том, что скрипт добавляет onclick в инпут в зависимости от того, какой последний элемент массива.
Что необходимо исправить, чтобы функция при наличии определенных элементов в массиве срабатывала независимо от их положения в нем?
Последний раз редактировалось Viral, 13.07.2011 в 11:23.
|
|
13.07.2011, 11:20
|
|
Модератор
|
|
Регистрация: 27.04.2010
Сообщений: 3,417
|
|
Сообщение от Viral
|
Подставил это условие, скрипт заработал абсолютно противоположно...
дает то, что написано в else независимо от того, что написано в <a>
|
Попробуйте убрать всё, кроме 1 и 2)
|
|
13.07.2011, 11:24
|
|
Модератор
|
|
Регистрация: 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>
Последний раз редактировалось trikadin, 13.07.2011 в 11:27.
|
|
|
|