Inline Active Javascript Form Validation - PullRequest
       10

Inline Active Javascript Form Validation

0 голосов
/ 20 ноября 2011

Я работаю над контактной формой, и мне нужна проверка встроенной формы JavaScript. У меня уже есть проверка php, но я хотел бы иметь некоторую активную проверку формы, например, http://twitter.com/signup.. Я бы хотел, чтобы она отображала и скрывала теги p после ввода. Вот мой HTML-код.

<form class="contact" method="POST" enctype="multipart/form-data" action="validate.php">


  <label for="fname">First Name*<br /></label>
  <input type="text" id="fname" style="font-family: Gochi Hand;" name="fname" placeholder="First" autofocus required autocomplete="on" />
    <div class="notices">
        <p id="helper" style="color:green;" class="g-notice">First Name Looks Good.</p> 
        <p id="helper" style="color:red;" class="r-notice">A First Name is required.</p>
        <p id="helper" style="color:#0099FF;" class="h-notice">Enter Your First Name.</p>
    </div>
  <br /><br />

  <label for="lname">Last Name*<br /></label>
  <input type="text" id="lname" style="font-family: Gochi Hand;" name="lname" placeholder="Last" required autocomplete="on" />
    <div class="notices">
        <p id="helper" style="color:green;" class="g-notice" style="color:green; ">Last Name Looks Good.</p> 
        <p id="helper" style="color:red;" class="r-notice">A Last Name is required.</p>
        <p id="helper" style="color:#0099FF;" class="h-notice">Enter Your Last Name.</p>
    </div>

  <br /><br />

  <label for="email">Email Address*<br /></label>
  <input type="email" name="email" style="font-family: Gochi Hand;" id="email" placeholder="example@website.com" pattern="^[\w-]+(\.[\w-]+)*@([a-z0-9-]+(\.[a-z0-9-]+)*?\.[a-z]{2,6}|(\d{1,3}\.){3}\d{1,3})(:\d{4})?$" required autocomplete="on" />
    <div class="notices">
        <p id="helper" style="color:green;" class="g-notice">Email Looks Good.</p> 
        <p id="helper" style="color:red;" class="r-notice">A Email is required.</p>
        <p id="helper" style="color:#0099FF;" class="h-notice">Enter Your Email.</p>
    </div>

  <br /><br />

  <label for="url">Website<br /></label>
  <input type="url" name="url" id="url" style="font-family: Gochi Hand;" placeholder="http://website.com"  pattern="^(http|https)://.+(.[a-zA-Z])$" autocomplete="on" />
    <div class="notices">
        <p id="helper" style="color:green;" class="g-notice">URL Looks Good.</p> 
        <p id="helper" style="color:#0099FF;" class="h-notice">Enter Your URL.</p>
    </div>

  <br /><br />


  <label for="age">Age*<br /></label>
  <input type="text" size="3" id="age" name="age" style="font-family: Gochi Hand;" required class="age" required placeholder="Age" pattern="^\d+$" autocomplete="on" />
    <div class="notices">
        <p id="helper" style="color:green;" class="g-notice">Age Looks Good.</p> 
        <p id="helper" style="color:red;" class="r-notice">An Age is required.</p>
        <p id="helper" style="color:#0099FF;" class="h-notice">Enter Your Age.</p>
    </div>

  <br /><br />

  <label for="comments">Comments*<br /></label>
  <textarea style="font-family: Gochi Hand;" required id="comments" name="comments" cols="30" rows="10"></textarea>

  <br /><br />

  <input type="hidden" value="True" name="go" id="go" />

  <input style="color:red;" type="submit" class="submit" value="Send!" />
  </form>

любые предложения или помощь будут стоить тонну.

Ответы [ 2 ]

1 голос
/ 20 ноября 2011

Вот пример формы

HTML

<form id='test'>
Name * <input id="name" type="text"><span id='errName' class='error'>This is a required field</span>
</form>

CSS

.error{
  display:none;
  color:red;
}

1009 * Javascript *

document.getElementById('test').onsubmit=function(){
  if(document.getElementById('name').value=''){
    document.getElementById('errName').style.display='block';
    return false;
  }
  else{
    return true;
  }
}

Это очень простой пример, и для этого есть разные пути. Например, вы можете просто добавить элемент, если есть ошибка, а не один hid. Кроме того, вы можете добавить еще одну функцию для проверки правильности значения при наличии события onblur в элементах input.

0 голосов
/ 20 ноября 2011

Как правило, вы хотите создать обработчик событий, который вызывается, когда пользователь взаимодействует с полями ввода и оценивает значение ввода, чтобы определить, какое сообщение показывать.Соответствующее сообщение отображается, а все остальные скрыты.Вы можете выполнить простое сопоставление с шаблоном в браузере или использовать AJAX для отправки ввода на сервер для оценки более сложной проверки, например, если электронная почта уже используется.

В форме регистрации в Твиттере используется комбинация событий длявызвать скрипт оценки.Похоже, используются onclick (или onfocus), onchange и onblur.Инструкции отображаются по щелчку (ваш эквивалент «.h-note»), а ввод оценивается по размытости (элемент теряет фокус).

Я бы использовал jQuery, потому что вам нужен сложный выбор элементов и обработка событий.Вы можете написать простой javascript для достижения того же эффекта, но для этого потребуется гораздо больше кода.Код jQuery для поля имени должен выглядеть примерно так:

<script type="text/javascript">
    jQuery(function($) {
        //hide all the messages
        $('.g-notice, .h-notice, .r-notice').hide();

        //create first name validator
        var fnameValidator = function() {
            var input = $('#fname');
            var notices = input.next('.notices');
            var g = notices.find('.g-notice');
            var h = notices.find('.h-notice');
            var r = notices.find('.r-notice');

            //hide all notices before deciding which to show
            g.hide();
            h.hide();
            r.hide();

            if (input.val() == '') {
                //input field is empty, show the help notice
                h.show();
            } else if (input.val().match(/[^\w\s]/) === null) {
                //input field is valid, show the good notice
                g.show();
            } else {
                //show required/error message
                r.show();
            }
        };

        //bind event handlers for the first name field
        $('#fname').click(fnameValidator).change(fnameValidator);
    });
</script>

Кстати: идентификаторы HTML-элементов должны быть уникальными.Вы можете сделать «помощник» классом или сделать каждый идентификатор другим (например, «fname-helper-h»).

...