Обычно, 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">
field1-field3 - поля в которые добавили "ивент".
Пример на лету:
заменяет точку на запятую (юзер не задумывается о правильности ввода числа),
не даёт вводить ничего, кроме цифр и "минуса"
не даёт вводить перевод строки (по Enter переходит на следующее поле ввода).
Преимущества:
весь код форматирования/проверки в одном месте,
100% интерактив,
доступны все прелести RegExp - произвольное форматирование введённого "на лету",
просто дифференцировать нужные действия в полях с помощью switch case (в примере нет)
Пока глюков замечено не было. Пара десятков контролируемых полей плюс десяток открытых доков с этим функционалом клиент не нагружают никак (client v9). Уменьшение Timeout до 1мс. ничего не рушило.
=================================================
P.S.
Это просто иллюстрация техники.
Не используйте этот код в боевой базе - утечка памяти!!!
Ниже - код без бага.
Вот пример добавление на форму, практически, "дополнительного" 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 ()
Пример на лету:
заменяет точку на запятую (юзер не задумывается о правильности ввода числа),
не даёт вводить ничего, кроме цифр и "минуса"
не даёт вводить перевод строки (по Enter переходит на следующее поле ввода).
Преимущества:
весь код форматирования/проверки в одном месте,
100% интерактив,
доступны все прелести RegExp - произвольное форматирование введённого "на лету",
просто дифференцировать нужные действия в полях с помощью switch case (в примере нет)
Пока глюков замечено не было. Пара десятков контролируемых полей плюс десяток открытых доков с этим функционалом клиент не нагружают никак (client v9). Уменьшение Timeout до 1мс. ничего не рушило.
=================================================
P.S.
Это просто иллюстрация техники.
Не используйте этот код в боевой базе - утечка памяти!!!
Ниже - код без бага.