Обычно, 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мс. ничего не рушило.
Вот пример добавление на форму, практически, "дополнительного" 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мс. ничего не рушило.