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

Тема в разделе "Lotus - Программирование", создана пользователем alexas1, 17 сен 2014.

  1. alexas1

    alexas1 Lotus team
    Lotus team

    Регистрация:
    10 апр 2014
    Сообщения:
    562
    Симпатии:
    214
    Обычно, 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">
    Код (Text):
    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мс. ничего не рушило.
     
  2. ty3uk

    ty3uk Well-Known Member

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

Поделиться этой страницей