Модераторы: Sardar, Aliance

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> объединение (переменных??) 
V
    Опции темы
dimon3191
Дата 1.5.2012, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 1.5.2012

Репутация: нет
Всего: нет



Доброе время суток.
Код

return numcheck.test(keychar)||keynum==46 || keynum==0;

Выше часть кода js и у меня не получается объединить keynum.
Пробовал между ними ставить || или && не помогло, так как можно их объединить подскажите пожалуйста?
PM MAIL   Вверх
ksnk
Дата 1.5.2012, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 48
Всего: 386



Что такое объединить?
|| и &&  - опреации над логическими. возвращают логическое.


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
dimon3191
Дата 2.5.2012, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 1.5.2012

Репутация: нет
Всего: нет



keynum==48 это точка и она работает в браузере, а вот добавить keynum==0 мне не получается.
(Может теперь более точно выразился)
PM MAIL   Вверх
iff
Дата 2.5.2012, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


Профиль
Группа: Участник
Сообщений: 949
Регистрация: 23.3.2007

Репутация: 2
Всего: 16



1. Не ясно что такое numcheck. Должно быть, это регулярное выражение в роде /\d/. Что-бы разобраться, по запросу "numcheck.test" нашёл в сети скрипт:
Код

<html> 
<body> 
<script type="text/javascript"> 
function Numbers(e) 
{ 
var keynum; 
var keychar; 
var numcheck; 

if(window.event) // IE 
{ 
keynum = e.keyCode; 
} 
else if(e.which) // Netscape/Firefox/Opera 
{ 
keynum = e.which; 
} 
keychar = String.fromCharCode(keynum); 
numcheck = /\d/; 
return numcheck.test(keychar); 
} 
</script> 

<form> 
<input type="text" onkeypress="return Numbers(event)" /> 
</form> 

</body> 
</html>

Его задача разрешать вводить только цифры. Если вам необходимо разрешить вводить так же и точку, то можно:
а) изменить регулярное выражение
Код

numcheck = /[\d\.]/;

б) сделать так, как вы - поставить тогическое условие
Код

numcheck.test(keychar)||keynum==46

которое означает "введённый символ - цифра ИЛИ точка".
П.С. Если вы хотите организовать таким образом ввод не только целых, но и дробных чисел - то это будет не правильно, т.к. скрипт пропустит такую строку, как например ".123" или "12....2".

Что же косается нуля, то не понятно, чего хотите добится. У какой клавиши по-вашему код - ноль?


--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
dimon3191
Дата 3.5.2012, 01:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 1.5.2012

Репутация: нет
Всего: нет



благодарю
без нуля я немогу передвигаться стрелками в input

а вот нашел код он мне немного полегче:
Код

function Numbers(e){
var k;
if(e.charCode!=null){k=e.charCode;}
if(window.event){k=e.keyCode;}
else if(e.which){k=e.which;}
if(k==0||k==5||k==8||k==13||k==46||k>=48&&k<=57){return true;}
else{return false;}}

а можете подсказать как сделать чтобы была только 1 точка?

Это сообщение отредактировал(а) dimon3191 - 4.5.2012, 01:34
PM MAIL   Вверх
Aliance
Дата 3.5.2012, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 17
Всего: 137



Какова первоначальная задача? Разрешить вводить только int / float?
PM MAIL WWW ICQ Skype   Вверх
dimon3191
Дата 4.5.2012, 01:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 1.5.2012

Репутация: нет
Всего: нет



насколько я знаю integer это целые числа, а float с плавающей запятой (то есть дробные),
но мне надо что бы водились числа как целые так и дробные
к примеру 5 без всякой точки
или 9.0064 уже точка нужна
PM MAIL   Вверх
ksnk
Дата 4.5.2012, 08:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 48
Всего: 386



А скопированное из какого нибудь документа `100 002,345` подойдет? Тоже, вроде как, число.

imho, проверять по мере ввода символов каждый конкретный символ - неправильно. Нужно проверять  конце (в onblur на элементе, onsubmit в форме) .

А так - можно пытаться по каждому клику клавиши проверять  значение. Если значение не похоже на число - рисовать  красную рамку вокруг элемента.

Код

<script>

function $class(cl){
    var reg; (reg=new RegExp("(^|\\b)"+cl+"(\\b|$)")).compile;
    return {
        add:function(x){
            if (!this.have(x))
                x.className+=(x.className&&' '||'')+cl;
        },
        have:function(x){
            return reg.test(x.className||'') ;
        },
        remove:function(x){
            x.className=(x.className||'').replace(reg,'')
        }
    }
}

var badinput=$class('badinput');

function checkit(el){
    if(el.value && /^\d+(\.\d+)?$/.test(el.value||'')){
        badinput.remove( el);
    } else {
        badinput.add( el);
    }
}
</script>
<style>
.badinput{
  border-color:red;
}
</style>

<input onkeyup="checkit(this)" >




Это сообщение отредактировал(а) ksnk - 4.5.2012, 09:25


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Aliance
Дата 4.5.2012, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 17
Всего: 137



Я бы вообще использовал бы нативную html5 клиент-валидацию для помощи пользователям, а полноценную валидацию оставил бы на совести сервера.
PM MAIL WWW ICQ Skype   Вверх
iff
Дата 4.5.2012, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


Профиль
Группа: Участник
Сообщений: 949
Регистрация: 23.3.2007

Репутация: 2
Всего: 16



Цитата(dimon3191 @  3.5.2012,  01:17 Найти цитируемый пост)
без нуля я немогу передвигаться стрелками в input

В IE при нажатии на стрелку событие onkepressed вообще не вызывается
А вот в Opera, действительно. Причём даже "с нулём" ничего не изменяется - при нажатие на стрелку генерируется код undefined, а не 0.


Цитата(dimon3191 @  4.5.2012,  01:01 Найти цитируемый пост)
насколько я знаю integer это целые числа, а float с плавающей запятой (то есть дробные)

Float может быть целым числом. (Из математики - множество рациональных чисел включает в себя множество целых)

Код

<html> 
<body> 
<form> 
<input type="text" value="0" onblur="this.value=parseFloat(this.value)||0"><br>
<input type="submit">
</form> 
</body> 
</html>

Здесь поле по умолчанию содержит 0 (value="0" - можете поставить любое другое число, либо убрать этот параметр, что-бы поле было пустым по-умолчанию). Если ввести какое-либо целое или дробное число, то оно так и останется в поле, а если ввсести например "1.12нгш", то в поле останется только "1.12". Если ввести строку, например "йцукен", то в поле будет 0 ( "||0" - можете поставить здесь другое число или пустую строку вместо нуля, что-бы она выводилась, когда пользователь вводит не число, а строку).


--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
Aliance
Дата 4.5.2012, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 17
Всего: 137



iff, проблема такого решения всплывает при вводе текста аля "ололо3.14" -> 0
PM MAIL WWW ICQ Skype   Вверх
iff
Дата 4.5.2012, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


Профиль
Группа: Участник
Сообщений: 949
Регистрация: 23.3.2007

Репутация: 2
Всего: 16



нет, пользователь должен ввести число, а он ввёл строку ("ололо3.14").


--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
dimon3191
Дата 4.5.2012, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 1.5.2012

Репутация: нет
Всего: нет



ksnk Дата 4.5.2012, 08:21
с одной стороны хорошо но с другой все же лучше было бы проверять символы по мере вода и если точка уже есть то запрещать ее вставлять еще раз

Aliance Дата 4.5.2012, 09:34
Я бы вообще использовал бы нативную html5 клиент-валидацию для помощи пользователям, а полноценную валидацию оставил бы на совести сервера.
html5 не все браузеры поддерживают
а насчет сервера скорей всего не подойдет так как планируется, что html файл можно скачать и запускать без доступа к глобальной сети

iff Дата 4.5.2012, 12:27
Код

onblur="this.value=parseFloat(this.value)||0"

неплохо, но да если перед цифрами идут буквы и т.п. то автоматически возвращает к нулю (жалко что не оставляет цифры)

Это сообщение отредактировал(а) dimon3191 - 4.5.2012, 23:13
PM MAIL   Вверх
ksnk
Дата 5.5.2012, 06:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 48
Всего: 386



Цитата(dimon3191 @  4.5.2012,  23:11 Найти цитируемый пост)
если точка уже есть то запрещать ее вставлять еще раз

Эээ... тоесть пример не запускался и даже не смотрелся?


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
dimon3191
Дата 5.5.2012, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 1.5.2012

Репутация: нет
Всего: нет



Код

<script>
function $class(cl){
    var reg; (reg=new RegExp("(^|\\b)"+cl+"(\\b|$)")).compile;
    return {
        add:function(x){
            if (!this.have(x))
                x.className+=(x.className&&' '||'')+cl;
        },
        have:function(x){
            return reg.test(x.className||'') ;
        },
        remove:function(x){
            x.className=(x.className||'').replace(reg,'')
        }
    }
}
var badinput=$class('badinput');
function checkit(el){
    if(el.value && /^\d+(\.\d+)?$/.test(el.value||'')){
        badinput.remove( el);
    } else {
        badinput.add( el);
    }
}
</script>
<style>
.badinput{
  border-color:red;
}
</style>
<input onkeyup="checkit(this)" >


запускал смотрел
разрешает водить все только если к примеру вожу буквы рамка светится красным
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0586 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.