Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 15.10.2016, 22:04
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

jQuery(function($) - это уже объявлено в коде, $(function(), повторений не надо.
Это

$.mask.definitions['~']='[+-]';
$('#phone').mask('(999) 999-9999');

убрать, а шаблон /^(?:\+7|8)[\s|-]*[\(]?\d{3}?[\)]?[\s|-]*\d{3}[\s|-]*\d{2}[\s|-]*\d{2}$/ заменить на /^\(\d{3}\)\s{1}\d{3}-\d{3}$/

PS. Или вы используете плагин, который форматирует ввод номера?

Последний раз редактировалось laimas, 15.10.2016 в 22:12.
Ответить с цитированием
  #22 (permalink)  
Старый 15.10.2016, 22:36
Интересующийся
Отправить личное сообщение для K_arina Посмотреть профиль Найти все сообщения от K_arina
 
Регистрация: 15.10.2016
Сообщений: 15

laimas,
Хотела чтобы у поля телефона была такая вот подсказка +38 (___) ___ __ __ , которая не исчезает после клика по заполняемому полю.
И да, прочитала информацию про плагин Masked Input и захотелось его применить)
Ответить с цитированием
  #23 (permalink)  
Старый 15.10.2016, 22:41
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Ну тогда применяйте плагин здесь:

$(function() {
    
    $.mask.definitions['~']='[+-]';
    $('#phone').mask('(999) 999-9999');

    
    $('#formcheck').submit(function() ....


а шаблон проверки телефона должен быть таким:

/^\+38\s{1}\(\d{3}\)\s{1}\d{3}-\d{3}$/
Ответить с цитированием
  #24 (permalink)  
Старый 15.10.2016, 22:49
Интересующийся
Отправить личное сообщение для K_arina Посмотреть профиль Найти все сообщения от K_arina
 
Регистрация: 15.10.2016
Сообщений: 15

laimas,Исправила, но не работает. Может много скриптов подключила? Или ошибка где-то, не могу найти.
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script src="jquery.maskedinput.js"></script>
<script src="script.js"></script>
<script scr="jquery-3.1.1.js"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
<script>
    $(function () {
        $.mask.definitions['~'] = '[+-]';
        $('#phone').mask('(999) 999-9999');
        $('#formcheck').submit(function () {
            var err = []
                , p = [

                    [/[а-яёА-ЯЁ]{2,12}/, 'Ввод имени некорректный'],
                    [/^\+38\s{1}\(\d{3}\)\s{1}\d{3}-\d{3}$/, 'Ввод телефона некорректный'],

                    [/^[a-z0-9_\.\-]+@[a-z0-9_\.\-]+\.[a-z\.]{2,6}$/, 'Ввод электронного адреса некорректный']

                         ];
            $(this).find('input').each(function (i, e) {
                var v = $.trim(e.value);
                if (!v || !(p[i][0]).test(v)) err.push(p[i][1])
            })
            if (err.length) {
                alert(err.join('\n'));
                return false;
            }
        })
    });
</script>
Ответить с цитированием
  #25 (permalink)  
Старый 15.10.2016, 23:02
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от K_arina
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script src="jquery.maskedinput.js"></script>
<script src="script.js"></script>
<script scr="jquery-3.1.1.js"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
Должно быть так - две версии JQ подключать не надо, выберите одну из них, если нужна поддержка IE8, то можно 1.8.2, а лучше тогда 1.8.3, если нет, то 1.9.0. А у вас их подключается целых три.

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script src="jquery.maskedinput.js"></script>
<script src="script.js"></script>


PS. Если плагин maskedinput.js требует конкретной версии (не ниже какой-то), то подключайте таковую.

Последний раз редактировалось laimas, 15.10.2016 в 23:26.
Ответить с цитированием
  #26 (permalink)  
Старый 16.10.2016, 10:33
Интересующийся
Отправить личное сообщение для K_arina Посмотреть профиль Найти все сообщения от K_arina
 
Регистрация: 15.10.2016
Сообщений: 15

А как сделать так, чтобы вместо отдельного сообщения уведомление об ошибке выводилось возле каждого поля формы? Это вместо p нужно присвоить объект? Как это сделать?
Ответить с цитированием
  #27 (permalink)  
Старый 16.10.2016, 11:50
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от K_arina
Это вместо p нужно присвоить объект?
Нет, переменная p может быть и массивом с вложенными массивами, это не так и важно, что она не объект. Нужно только иметь ввиду следующее - у меня кнопка отправки формы, это BUTTON, и так как я получаю коллекцию проверяемых полей $(this).find('input') не породит проблем. Но если вместо BUTTON будет INPUT типа submit, то возникнет ошибка - форма будет отправляться. В этом случае можно либо получать срез массива коллекции:

$(this).find('input').slice(0, -1).each(function(i, e) {
    .....


либо получать поля ввода типа text, указав соответствующим полям этот тип:

$(this).find('input[type="text"]').each(function(i, e) {
    .....


Эта переменная описывает правила проверки (шаблоны) и тексты сообщений об ошибках. Но ведь если поставлено задание посредством JQ, и если без использования pattern, то значит и required, и placeholder не должны применяться по идее. А значит проверку поля нужно производить раздельно: 1) поле заполнено?; 2) поле заполнено корректно?, а переменная p должна еще содержать для каждого поля сообщения об обязательном заполнении поля, и также текст подсказки что разрешено вводить в него.

А вывод этих сообщений у поля делается посредством скрипта с использованием слоя с абсолютным позиционированием, которое (и не только) описывается css-правилами. При этом подсказка для поля может выводиться при получении полем фокуса и если оно не заполнено и по истечении времени закрываться сама. А сообщения об ошибках естественно при их наличии.
Ответить с цитированием
  #28 (permalink)  
Старый 16.10.2016, 21:25
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

K_arina, зачем паттерны с подсказками в каком-то массиве? Запиши их прямо в атрибуты полей и проверяй поле за полем на высоком уровне абстракции.
Ответить с цитированием
  #29 (permalink)  
Старый 16.10.2016, 21:29
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Сообщение от Rise
Атрибуты pattern и required в Safari например как следует не поддерживаются

Это если захотеть браузерную валидацию, а она недоделана и вообще мутная. То есть берем var p=el.getAttribute('pattern'); и юзаем в своем скрипте и стопудово в Сафари оно сработает. Аналогично с required и в этот атрибут еще можно записать min-length если в паттерне нету.

Последний раз редактировалось warren buffet, 16.10.2016 в 21:31.
Ответить с цитированием
  #30 (permalink)  
Старый 16.10.2016, 21:40
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Вот тут сделано так было Валидация формы JQuery и вот как надо было продолжить

<form id="feedback" method="post">

<input name="name" required="required"
    pattern="[а-яёА-ЯЁ]{2,12}"
    e="Соблюдайте формат имени: от 2 до 12 русских букаф" />

<input name="phone" required="required"
    pattern="^(?:\+7|8)[\s|-]*[\(]?\d{3}?[\)]?[\s|-]*\d{3}[\s|-]*\d{2}[\s|-]*\d{2}$"
    e="Неправильно набран номер, неправильно набран номер, бип-бип-бип" />

<input name="email" type="email" required="required"
    pattern="^[a-z0-9_\.\-]+@[a-z0-9_\.\-]+\.[a-z\.]{2,6}$" 
    e="Соблюдайте формат имейл: some@example.com" />

</form>


Теперь написать скрипт в несколько строк дело нескольких минут, поскольку все самоочевидно.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
jQuery Form Plugin не знаю id формы! Apostol-Aristotel jQuery 0 20.01.2012 20:29
JQUERY - как сделать синхронный выбор/отмену выбора, в нескольких селектах формы sadzeburo jQuery 8 06.10.2011 15:24
Валидация поля для отправки формы shkarbatov Javascript под браузер 3 25.07.2011 14:07
Валидация формы, проблемы с функциями kolybasov jQuery 7 11.07.2011 13:06
Как отключить submit формы в jQuery? khusamov Общие вопросы Javascript 2 08.07.2009 00:54