Немного О Java Script В Клиенте (не Web)

alexas1

Green Team
10.04.2014
1 202
225
BIT
45
Обычно, JS в клиенте игнорируют. А зря.
Вот пример добавление на форму, практически, "дополнительного" onChange Event для произвольного количества обычных полей ввода, который позволяет очень просто работать с вводимыми данными OnFly.
Просто добавить маленький код в JS Header и прописать в нём контролируемые поля.
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">JS Header</div></div><div class="sp-body"><div class="sp-content">
Код:
var enterFields = ["field1", "field2", "field3"];
var f = document.forms[0];
//===============================================
function checkField ()
{
try{
for (i = 0; i < enterFields.length; ++i)	{ //просматриваем все поля ввода из списка "enterFields"
var tmpval = f[enterFields[i]].value.replace(/\./g,",") //замена точки на запятую
tmpval = String(tmpval.match(/-?\d*\,?\d*\n?/)) //любое кол-во цифр
// tmpval = String(tmpval.match(/-?\d?\d?\d?\d?,?\d?\d?\d?\n*/)) //макс. 7 цифр всего (макс. 3 знака после запятой)
if(tmpval.indexOf("\n")!=-1)	{ //если нажат ENTER
if (tmpval.charAt(tmpval.length-2)==","){tmpval = tmpval.slice(0,-2)}	//удаляем запятую, если после неё ничего нет
if(i < enterFields.length-1){f[enterFields[i+1]].focus()}; //переводим фокус на следующее поле если оно не последнее
tmpval = tmpval.replace(/\n/g,""); //убираем перевод строки
// f.MyButton.click();		//действия по ENTER-у кодом в "MyButton"
}
f[enterFields[i]].value = tmpval
}
}
catch(e){}
setTimeout('checkField ()', 100)	
}
checkField ()
field1-field3 - поля в которые добавили "ивент".
Пример на лету:
заменяет точку на запятую (юзер не задумывается о правильности ввода числа),
не даёт вводить ничего, кроме цифр и "минуса"
не даёт вводить перевод строки (по Enter переходит на следующее поле ввода).

Преимущества:
весь код форматирования/проверки в одном месте,
100% интерактив,
доступны все прелести RegExp - произвольное форматирование введённого "на лету",
просто дифференцировать нужные действия в полях с помощью switch case (в примере нет)

Пока глюков замечено не было. Пара десятков контролируемых полей плюс десяток открытых доков с этим функционалом клиент не нагружают никак (client v9). Уменьшение Timeout до 1мс. ничего не рушило.
 
  • Нравится
Реакции: anna
T

ty3uk

аха, пришлось подобный код делать при работе с КЛАДром. Там проблема с улицами была. Для больших городов, список улиц зашкаливает за 32к.знаков, соотвественно в выбор они не влезают. Пришлось делать подмену с ожиданием 3-рёх букв (или 4-рёх, уже не помню), и только после этого подгружать улицы которые начинаются на эти буквы.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!