Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.06.2015, 11:44
Интересующийся
Отправить личное сообщение для ru_rikki Посмотреть профиль Найти все сообщения от ru_rikki
 
Регистрация: 25.02.2015
Сообщений: 24

Валидация поля ввода
Доброго времени суток, уважаемые форумчане!

Придумала панацею для различных валидаций полей ввода:
Например: формат ввода 1-1-1-1 (число-число-число-число)
...onKeyup=\"RikkiValidInput(this, /(^[0-9]{1,2}([\-]{1}[0-9]{1,5}){3}$)/, '', 'input-group has-success', '');\"...
В данном случае без сообщения об ошибочном вводе и не используется класс при ошибочном вводе
пример здесь http://citr.tk
function RikkiValidInput(element, reg, aler, sClass, eClass) {
    var v = document.getElementById(element.id).value;
    var n = document.getElementById(element.id).name;
    var isValid = reg;
    if (isValid.test(v)) {
        document.getElementById(n).className = sClass;
    } else {
		if (!$.isEmptyObject(eClass)) {
			document.getElementById(n).className = eClass;
		}
        if (!$.isEmptyObject(aler)) {
            alert(aler);
        }
    }
    return false;
}


Если есть мнения или уже готовые функции в улучшенном варианте, с удовольствием протестировала бы.

Последний раз редактировалось ru_rikki, 23.06.2015 в 12:45.
Ответить с цитированием
  #2 (permalink)  
Старый 23.06.2015, 12:49
Аспирант
Отправить личное сообщение для jackdempsey2015 Посмотреть профиль Найти все сообщения от jackdempsey2015
 
Регистрация: 23.06.2015
Сообщений: 53

Сообщение от ru_rikki
формат ввода 1-1-1-1 (число-число-число-число)
конкретно для этого формата, по-моему достаточно:
/^(\d+-)*\d+$/
Ответить с цитированием
  #3 (permalink)  
Старый 23.06.2015, 13:08
Интересующийся
Отправить личное сообщение для ru_rikki Посмотреть профиль Найти все сообщения от ru_rikki
 
Регистрация: 25.02.2015
Сообщений: 24

сделала, не самый удачный пример был) зато натолкнул на правильные мысли

итого:
onKeyup=\"RikkiValidInput(this, /(^(\d+-)*\d+$)/, '', 'input-group has-success', 'input-group');\"
onMouseout=\"RikkiValidInput(this, /(^[0-9]{1,2}([\-]{1}[0-9]{1,5}){3}$)/, '', 'input-group has-success', 'input-group has-error');\"

function RikkiValidInput(element, reg, aler, sClass, eClass) {
    var v = document.getElementById(element.id).value;
    var n = document.getElementById(element.id).name;
    var isValid = reg;
    if (isValid.test(v)) {
        document.getElementById(n).className = sClass;
    } else if (!$.isEmptyObject(v)) {
        document.getElementById(n).className = eClass;
        if (!$.isEmptyObject(aler)) {
            alert(aler);
        }
    }
    return false;
}


здесь два события надо ставить с разными рег выражениями, что лишний раз подтверждает удобство функции

есть ли еще у кого-нибудь какие-нибудь замечания, пожелания?

Последний раз редактировалось ru_rikki, 23.06.2015 в 13:26.
Ответить с цитированием
  #4 (permalink)  
Старый 23.06.2015, 19:46
Интересующийся
Отправить личное сообщение для ru_rikki Посмотреть профиль Найти все сообщения от ru_rikki
 
Регистрация: 25.02.2015
Сообщений: 24

Сообщение от Rise Посмотреть сообщение
ru_rikki, с этим $.isEmptyObject надо что-то решать)
а как проверить на пустоту, и почему его нельзя использовать, искала аналог empty из php, или в js другая логика и достаточно != '' ?
мне бы если честно хотелось еще document.getElementById заменить на что-нибудь побыстрее, только вот не знаю как правильно, в jQuery я новичок, только прототайпы всякие не надо предлагать, мне достаточно bootstrapa с jQuery)

Последний раз редактировалось ru_rikki, 23.06.2015 в 20:34.
Ответить с цитированием
  #5 (permalink)  
Старый 23.06.2015, 20:44
Интересующийся
Отправить личное сообщение для ru_rikki Посмотреть профиль Найти все сообщения от ru_rikki
 
Регистрация: 25.02.2015
Сообщений: 24

Сообщение от Rise Посмотреть сообщение
ru_rikki, достаточно !v и !aler
сделала, только выкидывает окна пустые(
можно посмотреть сейчас http://citr.tk и красного цвета
Ответить с цитированием
  #6 (permalink)  
Старый 23.06.2015, 21:10
Интересующийся
Отправить личное сообщение для ru_rikki Посмотреть профиль Найти все сообщения от ru_rikki
 
Регистрация: 25.02.2015
Сообщений: 24

класс! спасибо, вообще не могу врубиться в эту js-логику))) и быстрее работать стало, супер! какое-то мученье, как только надо что-то на js написать сразу ступор и зависание) и вообще большое желание бросить все) А document.getElementById ничем нельзя заменить?
Ответить с цитированием
  #7 (permalink)  
Старый 24.06.2015, 12:00
Интересующийся
Отправить личное сообщение для ru_rikki Посмотреть профиль Найти все сообщения от ru_rikki
 
Регистрация: 25.02.2015
Сообщений: 24

Сообщение от Rise Посмотреть сообщение
ru_rikki, ссылка
спасибо, оставлю document.getElementById, пробовала так вызывать: $('#' + element.id).empty(); если во входных данных задано как this, то ничего не получается, вобщем окончательный вид функции:
function RikkiValidInput(element, reg, aler, sClass, eClass, clr) {
    var v = document.getElementById(element.id).value;
    var n = document.getElementById(element.id).name;
    var isValid = reg;
    if (isValid.test(v)) {
        document.getElementById(n).className = sClass;
    } else if (v) {
        document.getElementById(n).className = eClass;
        if (clr) {
            document.getElementById(element.id).value = "";
        }
        if (aler) {
            alert(aler);
        }
    }
    return false;
}

onKeyup=\"RikkiValidInput(this, /(^[A-ZА-Яa-zа-я0-9№'\(\)\,\.\_\:\s\-]*?$)/, '".$locale['e45']."', 'input-group has-success', 'input-group has-error', 'input-group');\"

или другое поле

onKeyup=\"RikkiValidInput(this, /(^(\d+-)*\d+$)/, '', 'input-group has-success', 'input-group', '');\"
onMouseover=\"RikkiValidInput(idOn_number, /(^[0-9]{1,2}([\-]{1}[0-9]{1,5}){3}$)/, '', 'input-group has-success', 'input-group has-error', '');\"

Последний раз редактировалось ru_rikki, 24.06.2015 в 19:20.
Ответить с цитированием
  #8 (permalink)  
Старый 24.06.2015, 18:15
Интересующийся
Отправить личное сообщение для ru_rikki Посмотреть профиль Найти все сообщения от ru_rikki
 
Регистрация: 25.02.2015
Сообщений: 24

Rise, да вы просто шайтан!
вот оно в муках рожденное
function RikkiValidInput(element, reg, aler, sClass, eClass, clr) {
    if (reg.test(element.value)) {
        element.parentNode.className = sClass;
    } else if (element.value) {
        element.parentNode.className = eClass;
        if (clr) {
            element.parentNode.className = clr;
            element.value = "";
        }
        if (aler) {
            alert(aler);
        }
    }
    return false;
}

Не могу добавить вам еще плюс в карму, уже 2 раза кому то поставила, все равно требует что кому-то еще надо ставить(
---
Капец, уже третий отзыв написала и даже с комментарием и все равно не могу поставить плюсик(

Последний раз редактировалось ru_rikki, 24.06.2015 в 19:48.
Ответить с цитированием
  #9 (permalink)  
Старый 24.06.2015, 20:33
Интересующийся
Отправить личное сообщение для ru_rikki Посмотреть профиль Найти все сообщения от ru_rikki
 
Регистрация: 25.02.2015
Сообщений: 24

Сообщение от Rise Посмотреть сообщение
ru_rikki,
document.getElementById(element.id). element.
document.getElementById(n). element.parentNode.
isValid. reg.
это в мобильных браузерах тоже будет работать? похоже что во всех

У меня еще вопрос, есть функция
function RikkiButtonDis(obj, button) {
    var num = 1;
    for (var i = 0; i < obj.elements.length; i++) {
        if (obj.elements[i].type == 'checkbox') {
            if (obj.elements[i].checked === true) {
                document.getElementById(button).disabled = false;
            } else {
                num++;
                if (obj.elements.length - num > 3) {
                    document.getElementById(button).disabled = true;
                }
            }
        }
    }
    return false;
}

$misc_filter = "onChange=\"yahooRikki(this); RikkiButtonDis(this,'#idRikkiSpread');\"";
echo "<fieldset id='spFilter' ".$misc_filter.">\n";
...
echo "</fieldset>\n";
...
echo "<input  id='idRikkiSpread' type='submit' name='RikkiSpread' class='btn btn-default' disabled='true' value='".$locale['search53']."'>\n";

Как здесь убрать document.getElementById?
посмотреть можно здесь
http://rikki.xp3.biz/search.php?status=2&region=&set=&loc1=&loc2=&loc3= &zone1=&zone2=&zone3=&disp=1&type1=010&type2=013&t ype3=014
если нажать на ссылку Сбросить все диапазоны и кнопку найти, затем на новой странице результатов нажать Перейти к фильтрам и выбрать какой-нибудь радиобатон лучше города/районы

Сама сделала
function RikkiButtonDis(obj, button) {
    var num = 0;
    for (var i = 0; i < obj.elements.length; i++) {
		if (obj.elements[i].type == 'checkbox') {
			if (obj.elements.length - num == obj.elements.length) {
				$(button).prop('disabled', true);
				num++;
			} else if ((obj.elements[0].checked === true) || (obj.elements[i].checked === true)) {
				$(button).prop('disabled', false);
			}
		}	
    }
    return false;
}

Последний раз редактировалось ru_rikki, 25.06.2015 в 10:53.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как проверить поля ввода с помощью JQuery? Phoenix13 Элементы интерфейса 10 09.12.2014 16:02
на странице checkbox'ы при активации их и нажатии "ОК" должны появится поля ввода Азат Элементы интерфейса 9 13.07.2012 10:51
Обработка даты из поля ввода Rainman71 Элементы интерфейса 6 15.04.2012 10:04
Спецу: Зависимые поля ввода SidneyShaw Элементы интерфейса 4 25.09.2011 21:14
Как сделать связанные поля ввода diakon Элементы интерфейса 2 11.12.2009 16:17