Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.05.2011, 16:55
Аватар для 9xakep
сегодня в 12:34|Комментир
Отправить личное сообщение для 9xakep Посмотреть профиль Найти все сообщения от 9xakep
 
Регистрация: 12.04.2011
Сообщений: 1,180

Не работает "или" в if
Вот простенький код:
<form name="age">
<input type="text" value="" name="pole">
</form>
<script>

function fage () {
var a = document.age.pole.value
if (document.age.pole.value == 1) {
alert('Один пользователь')
}
if (document.age.pole.value == 2||3||4) {
alert(+a+ 'Пользователя')
}
if (document.age.pole.value == 5||6||7||8||9||10||11||12||13||14||15||16||17||18||19||20) {
alert(+a+ 'Пользователей')
}
}
</script>
<input type="button" value="Сколько?" onclick="fage()">

Почему если я введу "2" например то он мне выдает вначале:2Пользователя(как и надо),а потом 2 пользоватеей???Хотя по условию не должен
Ответить с цитированием
  #2 (permalink)  
Старый 07.05.2011, 17:48
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Сообщение от 9xakep
Не работает "или" в if
Он работает. И работает правильно. Но, думаю, я очень тебя удивлю, если я расскажу, как
1 === 1 || 2 || 3 // вернет true
но
3 === 1 || 2 || 3 // вернет 2 :0
П очему? Все просто! Оператор || возвращает то, что при приведении к boolean дает true.
Т.е. в первом:
1 === 1 - это true. Boolean(true) === true; поэтому возврает true.
А во-втором случае:
3 === 1 - это false;
А вот Boolean(2) === true, поэтому возвращает 2.
А в твоем случае лучше использовать switch:
switch(a){
  case 1:
  alert( 'Один пользователь' );
  break;
  case 2: case 3: case 4:
  alert( a + 'пользователя' );
  break;
  default:
  alert( a + 'пользователей' );
};

И еще:
+a+ 'Пользователя'
Т.е. ты сначала строку приводишь к числу, чтобы потом интерпритатор привел это число к строке, чтобы сложить со строкой? Не бред ли???
Ответить с цитированием
  #3 (permalink)  
Старый 07.05.2011, 18:20
Аватар для 9xakep
сегодня в 12:34|Комментир
Отправить личное сообщение для 9xakep Посмотреть профиль Найти все сообщения от 9xakep
 
Регистрация: 12.04.2011
Сообщений: 1,180

Спасибо.
Цитата:
И еще: +a+ 'Пользователя'
+a+ 'Пользователя'

Т.е. ты сначала строку приводишь к числу, чтобы потом интерпритатор привел это число к строке, чтобы сложить со строкой? Не бред ли???
А как под другому?Если по короче:чтобы то число которое вводилось в строке,появлялось в алерте.
Ответить с цитированием
  #4 (permalink)  
Старый 07.05.2011, 18:35
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Я вот к чему:
alert( '1' + '' === +'1' + '' );
Если нет разницы, зачем делать лишние телодвижения?
Ответить с цитированием
  #5 (permalink)  
Старый 07.05.2011, 20:43
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Сообщение от 9xakep
А как под другому?Если по короче:чтобы то число которое вводилось в строке,появлялось в алерте.
куда проще:

<script type="text/javascript">
window.onload = function() {
    var events = ['keyup', 'change'], i = events.length, input = document.getElementById('input');
    while(i--) {
        input['on'+events[i]] = function() {
            var _value = this.value;
            if(_value != '' && /\d/.test(_value)) {
                alert('пользовател'+(_value == 1 ? 'ь' : _value >= 2 && _value <= 4 ? 'я' : 'ей'));
            }
        };
        break;
    }
};
</script>
<input type="text" id="input" value="" />

Последний раз редактировалось monolithed, 07.05.2011 в 20:47.
Ответить с цитированием
  #6 (permalink)  
Старый 08.05.2011, 10:50
Аватар для 9xakep
сегодня в 12:34|Комментир
Отправить личное сообщение для 9xakep Посмотреть профиль Найти все сообщения от 9xakep
 
Регистрация: 12.04.2011
Сообщений: 1,180

Сообщение от monolithed Посмотреть сообщение
куда проще:

<script type="text/javascript">
window.onload = function() {
    var events = ['keyup', 'change'], i = events.length, input = document.getElementById('input');
    while(i--) {
        input['on'+events[i]] = function() {
            var _value = this.value;
            if(_value != '' && /\d/.test(_value)) {
                alert('пользовател'+(_value == 1 ? 'ь' : _value >= 2 && _value <= 4 ? 'я' : 'ей'));
            }
        };
        break;
    }
};
</script>
<input type="text" id="input" value="" />
Насколько я понял тут правильные окончания только до 20
Ответить с цитированием
  #7 (permalink)  
Старый 08.05.2011, 10:51
Аватар для 9xakep
сегодня в 12:34|Комментир
Отправить личное сообщение для 9xakep Посмотреть профиль Найти все сообщения от 9xakep
 
Регистрация: 12.04.2011
Сообщений: 1,180

Сообщение от Sweet Посмотреть сообщение
Я вот к чему:
alert( '1' + '' === +'1' + '' );
Если нет разницы, зачем делать лишние телодвижения?
"Лишние телодвижения"-Написать "+"?
Ответить с цитированием
  #8 (permalink)  
Старый 08.05.2011, 11:34
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

для компа это не просто плюсик перед строкой - это перевод из одного типа в другой

не дурмаю, что всё так легко
Ответить с цитированием
  #9 (permalink)  
Старый 08.05.2011, 13:05
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Сообщение от 9xakep
Насколько я понял тут правильные окончания только до 20
А кто вам мешает подумать?

<script type="text/javascript">
window.onload = function() {
    var events = ['keyup', 'change'], i = events.length, input = document.getElementById('input');
    while(i--) {
        input['on'+events[i]] = function() {
            var _value = this.value;
            if(_value != '' && /\d/.test(_value)) {
                var regex = _value.match(RegExp('\\d'+(_value <= 20 ? '{1,}' : '')+'$'));
               alert('пользовател'+(regex == 1 ? 'ь' : regex >= 2 && regex <= 4 ? 'я' : 'ей'));
            }
        };
        break;
    }
};
</script>
<input type="text" id="input" value="" />
Ответить с цитированием
  #10 (permalink)  
Старый 08.05.2011, 14:03
Аватар для 9xakep
сегодня в 12:34|Комментир
Отправить личное сообщение для 9xakep Посмотреть профиль Найти все сообщения от 9xakep
 
Регистрация: 12.04.2011
Сообщений: 1,180

Сообщение от monolithed Посмотреть сообщение
А кто вам мешает подумать?

<script type="text/javascript">
window.onload = function() {
    var events = ['keyup', 'change'], i = events.length, input = document.getElementById('input');
    while(i--) {
        input['on'+events[i]] = function() {
            var _value = this.value;
            if(_value != '' && /\d/.test(_value)) {
                var regex = _value.match(RegExp('\\d'+(_value <= 20 ? '{1,}' : '')+'$'));
               alert('пользовател'+(regex == 1 ? 'ь' : regex >= 2 && regex <= 4 ? 'я' : 'ей'));
            }
        };
        break;
    }
};
</script>
<input type="text" id="input" value="" />
Единственный нюанс...Я новичок,и слабо в нем разбираюсь,но все равно спасибо
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ajax запросы, работает на одних компах и не работает на других vtornik23 AJAX и COMET 2 22.03.2010 18:22
ява-скрипт выборочно работает-не работает zeta777 Internet Explorer 0 20.01.2010 11:41
Динамическая HTML форма (FireFox - работает, IE - не работает) dm1tr1y Общие вопросы Javascript 10 11.12.2009 15:59
Не работает eval в IE ..::Silence::.. Общие вопросы Javascript 8 25.03.2009 13:16
Скрипт меню-гармошки работает выборочно Extern Элементы интерфейса 2 23.02.2009 15:32