Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   Я новичок: делаю форму обработки, но она не работает корректно. (https://javascript.ru/forum/project/52309-ya-novichok-delayu-formu-obrabotki-no-ona-ne-rabotaet-korrektno.html)

zorro76 12.12.2014 23:23

Я новичок: делаю форму обработки, но она не работает корректно.
 
Вложений: 1
Идея такова: при отправке формы незаполненные поля или не правильно заполненные должны отображаться красным цветом и выводится справа tooltip с правилом: введите имя, введите пароль, введите телефон. Иначе, если все правильно - то поля зеленные и все ок.

А происходит все так: заполнены поля или нет, все отображается зеленным. tooltip не отображается. Форма на Bootstrap 3.

:help: Я только начал изучать Js поэтому обращаюсь за помощью к знающим людям. Спасибо.

danik.js 12.12.2014 23:46

<form action="javascript:void alert('Форма отправлена!')">
    <input placeholder="Имя" type="text" title="Укажите ваше имя (не менее двух букв)" required pattern="[а-яА-ЯёЁ]{2,128}" />
    <input placeholder="Телефон" type="tel" title=" Укажите номер телефона (от 5 до 13 цифр)" required pattern="[0-9]{5,13}" />
    <button type="submit">Отправить</button>
</form>


Работает в новых браузерах. Для старых есть костыль.

zorro76 12.12.2014 23:59

Это да, работает, спасибо, но у меня форма на Bootstrap, и ошибка в ней...
Хочу разобраться, ведь все правильно как будто делал, но..
(function () {
   
    var app = {
         
        initialize: function () {          
            this.modules();
            this.setUpListeners();
        },
 
        modules: function () {
 
        },
 
        setUpListeners: function () {
            $('form').on('submit', app.submitForm);  
        },
 
        submitForm: function (e) {
            e.preventDefault();
        alert('e');   
            var form = $(this);
            
            if (app.validateForm(form) === false) return false;
            console.log('go in ajax');
        },
        
        validateForm: function (form) {
            var inputs = form.find('input'),
                valid = true;
            
            inputs.tooltip('destroy');
            
            $.each(inputs, function (index, val) {
                var input = $(val),
                    val = input.val(),
                    formGroup = input.parents('.form-group'),
                    label = formGroup.find('label').text().toLowerCase(),
                    textError = "Введите " + label;
                
                if (val.length === 0) {
                    formGroup.addClass('has-error').removeClass('has-success');
                    input.tooltip({
                        trigger: 'manual',
                        placement: 'right',
                        title: textError
                    }).tooltip('show');
                    valid = false;
                } else {
                   formGroup.addClass('has-success').removeClass('has-error'); 
                }
                
                return valid;
            });
        }
    }
    
    app.initialize();
    
}());

zorro76 13.12.2014 00:35

код к этому скрипту:
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Bootstrap forms</title>
    <link rel="stylesheet" href="main_form.css">

    <link href="bootstrap.min.css" rel="stylesheet">

    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
    <!--[if lt IE 9]>
      <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
      <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
  </head>
  <body>
    <div class="container">
        <div class="col-sm-6">
           <h1 class="header">Форма заказа</h1>
            <form class="form-horizontal" role="form">
              <div class="form-group">
            <label for="inputName" class="col-sm-2 control-label">Имя</label>
            <div class="col-sm-10">
              <input name="name" type="text" class="form-control" id="inputName" placeholder="Name">
            </div>
          </div>
          <div class="form-group">
            <label for="inputEmail" class="col-sm-2 control-label">Email</label>
            <div class="col-sm-10">
              <input name="email" type="email" class="form-control" id="inputEmail" placeholder="Email">
            </div>
          </div>
          <div class="form-group">
            <label for="inputPhone" class="col-sm-2 control-label">Телефон</label>
            <div class="col-sm-10">
              <input name="phone" type="text" class="form-control" id="inputPhone" placeholder="Phone">
            </div>
          </div>
          <div class="form-group">
            <div class="col-sm-offset-2 col-sm-10">
              <button type="submit" class="btn btn-success">Отправить</button>
            </div>
          </div>
            </form>
            	<form action="javascript:void alert('Форма отправлена!')">
2
    <input placeholder="Имя" type="text" title="Укажите ваше имя (не менее двух букв)" required pattern="[а-яА-ЯёЁ]{2,128}" />
3
    <input placeholder="Телефон" type="tel" title=" Укажите номер телефона (от 5 до 13 цифр)" required pattern="[0-9]{5,13}" />
4
    <button type="submit">Отправить</button>
5
</form>

        </div>
    </div>
    
    

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    <script src="bootstrap.min.js"></script>
    <script src="main_form.js"></script>
  </body>
</html>

zorro76 13.12.2014 13:05

Ха, настойчивость дает результат:))) разобрался.


Часовой пояс GMT +3, время: 06:01.