Проверка числового поля

Gor

Well-known member
07.06.2005
517
1
#1
Вопрос лёгкий. Но кое что хочу всё таки разжевать=)

Задача такая - создать поле чтобы в него можно было записать только числовые значения и чтобы значение было всегда больше единицы.

Я обычно все поля скопом проверяю на скриптах, по событиям =)) Наверно глупо)
Input Validation почти не использую.

В этой задачи я так понимаю необходимо использовать числовое поле, по крайней мере оно выбрасывает лотусовую ошибку когда в него пытаешься ввести буквы а потом перейти в другое поле - Cannot convert text to a number.

А как сделать, чтобы Messagebox с собственным ругательным сообщением на русском вылазил сразу же если ты набрал предположим букву в это поле и проверялось на неравенство нулю и для этого не надо было бы переходить в другое поле?
 
S

Sandr

#2
1-е. Убрать обновление документа при потере фокуса в поле...
2-е. Можно сделать текстовое поле, а кооректность введенного значения проверять самому, на какое-то событие.. например на кверисейве...

3-е Input Validation - гогно...
 

morpheus

скриптописец
07.08.2006
3 915
1
#4
Мой совсем извращеный моск подсказывает просто напросто в текстовом поле зделать запрет ввода всего кроме цифрна подобии этого ( тут мы ловим Enter, по аналогии можно ловить любой символ
 

Gor

Well-known member
07.06.2005
517
1
#5
1-е. Убрать обновление документа при потере фокуса в поле...
2-е. Можно сделать текстовое поле, а кооректность введенного значения проверять самому, на какое-то событие.. например на кверисейве...

3-е Input Validation - гогно...
Как то я опять неправильно высказался наверно))

2-е. Можно сделать текстовое поле, а кооректность введенного значения проверять самому, на какое-то событие.. например на кверисейве...


этим способом я обычно и пользуюсь...
Я обычно все поля скопом проверяю на скриптах, по событиям =)) Наверно глупо)
... (просто не написал по какому именно событию:blink:)

здесь задачка несколько иная...
хотелось бы мгновенного результата... чтобы ввёл букву а тебе мессаджбокс - вы ввели символ в числовое поле, ввёл ноль или отрицательное значени - а он тебе мессагу - значение поля должно превыщать 0. хотелось бы вот так...
Подскажите, может делал кто нибудь такое

У меня есть прикрученная реализация на Java scriptax чтобы в поле нельзя было ввести больше 20,30,40 итд символов, это где то уже обсуждалось. Здесь видимо тоже данную задачку можно реализовать только с помощью Javы? Может подобное ктонибудь писал уже? Или без Javы можно обойтись?
Просто знаний по Jave мне вряд ли хватит для реализации...

Мой совсем извращеный моск подсказывает просто напросто в текстовом поле зделать запрет ввода всего кроме цифрна подобии этого ( тут мы ловим Enter, по аналогии можно ловить любой символ
уф... блин... Думал это можно в Лотусе как нибудь попроще реализовать))
 

morpheus

скриптописец
07.08.2006
3 915
1
#6
<!--QuoteBegin-Gor+28:11:2007, 12:57 -->
<span class="vbquote">(Gor @ 28:11:2007, 12:57 )</span><!--QuoteEBegin-->Просто знаний по Jave мне вряд ли хватит для реализации...
[snapback]87664" rel="nofollow" target="_blank[/snapback]​
[/quote]
А вот не стоит путать JAVA и JAVASCRIPT это раз
я сам реализовавывл меанизм отлова Enter'a не гугукая в жаваскриптах ифига - потратил пол дня облазил нмого инета и порыскал в своих книгах по web програмированию, тем более что моего примера будет более чем достаточно ( в нём есть убирание последнего символа - в моём случае Ентра , в Вашем - любого НЕ числа )
 
S

Sandr

#7
Вот функция

Код:
function checkNumFields(fldArray) {
try {
var result = true;
var re = /\d+\.?\d*/;
for(i=0;i<fldArray.length; i++) {
var fieldName = Left(fldArray[i], "|");
var fieldAlias = Right(fldArray[i], "|");
if (document.getElementById(fieldName) && document.getElementById(fieldName).type!='hidden') {
var fldValue = document.getElementById(fieldName).value;
var retVal = fldValue.match(re);
if (!(retVal != null && retVal == fldValue)) {
alert('Поле "'+ fieldAlias + '" должно содержать положительное числовое значение!');
//						document.getElementById(fieldName).focus();		  Ошибка в случае если фокус на неактивной вкладке
document.getElementById(fieldName).select();
result = false;
return result;
};
};
};
return result;
} catch(e) {
alert("checkNumFields: " + e.message);
};
};
Вызываем на onBlur поля.
Передаем в неё масив полей и алиесов полей...
К примеру если есть поле "Number" и алиес его "Число", то передаем туда масив элементами которого будут значения "Number|Число"

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

Gor

Well-known member
07.06.2005
517
1
#8
Вроде бы всё сделал правильно, прикрутил функцию... логика в принципе понятна...
Вылезает ошибка -

CheckNumFields: FldArray has no properties


Вот весь код на Header
Код:
*/

var listenField1 

function startListener1 (field) {
listenField1 = field;
checkNumFields();
}


*/
function stopListener1 () {
listenField1 = null;
}

//функция для проверки числового поля

function checkNumFields(fldArray) {
try {
var result = true;
var re = /\d+\.?\d*/;
for(i=0;i<fldArray.length; i++) {
var fieldName = Left(fldArray[i], "|");
var fieldAlias = Right(fldArray[i], "|");
if (document.getElementById(fieldName) && document.getElementById(fieldName).type!='hidden') {
var fldValue = document.getElementById(fieldName).value;
var retVal = fldValue.match(re);
if (!(retVal != null && retVal == fldValue)) {
alert('Поле "'+ fieldAlias + '" должно содержать положительное числовое значение!');
//						document.getElementById(fieldName).focus();		  Ошибка в случае если фокус на неактивной вкладке
document.getElementById(fieldName).select();
result = false;
return result;
};
};
};
return result;
} catch(e) {
alert("checkNumFields: " + e.message);
};
};
на Blur
Код:
if (checkNumFields(CZE))
this.focus();
else
stopListener1();
на On Focus
Код:
startListener1(this);
 

fedotxxl

Well-known member
09.11.2005
614
0
#10
Для: Morpheus
Твой ум самый извращенный =)
А вот не стоит путать JAVA и JAVASCRIPT это раз
Любимая фраза всех и вся
Люди, не используйте JS для таких вещей! Опять же взял код на ловлю Enter'a (несколько иной)... работает все ок. Но ИНОГДА выдает ошибки... почему - хз... Может с фреймами что-то, может ещё что-то

В querySave:
Continue = False
If Not a Like "*#[.,]*#" Then
Messagebox "Вы ввели какой-то бред", 48, "Ошибка исполнения"
Elseif Val(a) <= 1 Then
Messagebox "Вы ввели число меньшее или равное единице", 48, "Ошибка исполнения"
Else
Continue = True
End If
, где а - содержимое поля
 

Gor

Well-known member
07.06.2005
517
1
#11
Я так понял в скобках для функции должно передаваться поле текущее?
CZE у меня поле... в которое вноситься должны значения числовые положительные...
хотя если CZE убрать и оставить так -
if (checkNumFields())
this.focus();
else
stopListener1();

Ошибка остаётся точно такая же
checkNumFields: fLD ARRAY HAS NO PROPERTIES(
 
S

Sandr

#12
Я же написал под кодом

К примеру если есть поле "Number" и алиес его "Число", то передаем туда масив элементами которого будут значения "Number|Число"
Если ваще поле называется CZE и алиес у него, к примеру CZE , то передавайте в функцию такое

"CZE|CZE"

тобишь

checkNumFields("CZE|CZE")

И все...

Для: fedotxxl

Дык сказано же было, что не на сохранение нужно, а на потерю фокуса...
Можно, вообще то на Exiting LS впихнуть... Но попросили JS функцию, её и предоставили :blink:. Сам я лично юзаю её только в ВЕБе...
 

fedotxxl

Well-known member
09.11.2005
614
0
#13
Для: Sandr
Зачем городить огород?... Правильней не реализовать, а направить на правильный путь
 
30.05.2006
1 345
11
#14
Мудрят, мудрят...
Сделать поле ключевым, НО с допустимыми значениями НЕ из списка. На каждый символ будет PostRecalculate
 

Omh

Lotus team
04.07.2007
2 210
1
#15
Для: Constantin A Chervonenko
Только надо принять во внимание сложность формы.
А то может получиться так, что каждый символ будет появлятся 2 секунды.
 

Gor

Well-known member
07.06.2005
517
1
#16
Я обратился за помощью потому что я действительно не видел выхода из ситуации кроме как использование Java script функции...
Рассматривал вариант я с PostRecalculate, но на форме 30 полей вводимых с клавиатуры, показалось что будет очень грузновато с ним... на выходе из этого поля и на querysave лотус скриптами варианты тоже не подходят, поэтому только javascript...

Не знаю сейчас что со мной не то или что то ещё, но я тупо не могу создать АЛИАС На поле!!!=))))))
В имени поля пишу к примеру CZE|CZE выходит ошибка сразу -
Field name must begin with the letter or the symbols _ and итд итп =)))

Перепробовал кучу вариантов... пробелов нету нигде...((( ????
По видимому жутко туплю))
 

morpheus

скриптописец
07.08.2006
3 915
1
#17
Для: Gor
Для JS Вы должны писать имя поля в последней закладке свойст поля , закладка называеться <HTML> вот там и задавайте имя поля
 

Gor

Well-known member
07.06.2005
517
1
#18
Там владка name не редактируемая, а дальше идут HTML Tags... В HTML tags в ID у меня забито CZE
 
S

Sandr

#19
Я обратился за помощью потому что я действительно не видел выхода из ситуации кроме как использование Java script функции...
Рассматривал вариант я с PostRecalculate, но на форме 30 полей вводимых с клавиатуры, показалось что будет очень грузновато с ним... на выходе из этого поля и на querysave лотус скриптами варианты тоже не подходят, поэтому только javascript...

Не знаю сейчас что со мной не то или что то ещё, но я тупо не могу создать АЛИАС На поле!!!=))))))
В имени поля пишу к примеру CZE|CZE выходит ошибка сразу -
Field name must begin with the letter or the symbols _ and итд итп =)))

Перепробовал кучу вариантов... пробелов нету нигде...((( ????
По видимому жутко туплю))
alias для поля, существует только в понятии функции.. Он там есть только для красоты сообщения... :)
Если красота сообшщения вас не смущает, то пишите так.
Если есть поле CZE, то в функцию передавайте "CZE|CZE". :)
Это сделано только для удобства пользователя.. пользователь модет не подозревать о существовании поля CZE, зато может знать о поле "Центральный загрузочный элемент" (Не смог я подобрать расшифровку аббревиатуры CZE :))... вот...

Для: Gor
Для JS Вы должны писать имя поля в последней закладке свойст поля , закладка называеться <HTML> вот там и задавайте имя поля
зачем? Все и так схавается... Тем более, что имя туда автоматически прописывается.. и поменять его низя... Можно только тем же JSом...но не нужно...
 

Gor

Well-known member
07.06.2005
517
1
#20
спасибо Sandr объяснил и разъяснил непросвещённому)

Но у меня всё равно неработает :)
Код:
On Blur:
if (checkNumFields1("CZE|CZE"))
this.focus();
else
stopListener1();
On focus:
startListener1(this);

JS Header

var listenField1 // поле которое мониторить буим


function startListener1 (field) {
listenField1 = field;
checkNumFields("CZE|CZE");
// checkNumFields1("CZE");
}


/* 
Обнуляем переменные для того чтобы оставновить мониторинг
*/
function stopListener1 () {
listenField1 = null;
}

//функция для проверки числового поля

function checkNumFields(fldArray) {
try {
var result = true;
var re = /\d+\.?\d*/;
for(i=0;i<fldArray.length; i++) {
var fieldName = Left(fldArray[i], "|");
var fieldAlias = Right(fldArray[i], "|");
if (document.getElementById(fieldName) && document.getElementById(fieldName).type!='hidden') {
var fldValue = document.getElementById(fieldName).value;
var retVal = fldValue.match(re);
if (!(retVal != null && retVal == fldValue)) {
alert('Поле "'+ fieldAlias + '" должно содержать положительное числовое значение!');
//						document.getElementById(fieldName).focus();		  Ошибка в случае если фокус на неактивной вкладке
document.getElementById(fieldName).select();
result = false;
return result;
};
};
};
return result;
} catch(e) {
alert("checkNumFields: " + e.message);
};
};
Обшипка=))

CheckNumFields: Left is not defined