Конечно, вы можете checkValidity()
на определенных входах, но опять-таки не работает так, как вы бы хотели. Если не считать запрет по умолчанию, если вы все еще хотите отправить форму после завершения проверки, вы все равно можете обработать этот стиль, выполнив следующие действия:
Обратите внимание, что в формах, которые вы не хотите применять проверяющие стили CSS, вы можете просто добавить атрибут novalidate
к форме.
HTML:
<form name="login" id="loginForm" method="POST">
<input type="email" name="username" placeholder="Email">
<input type="password" name="password" placeholder="Password">
<input type="submit" value="LOG IN" class="hero left clearBoth">
</form>
Если вы не используете SCSS, я очень рекомендую изучить его, он гораздо более управляем, прост в написании и менее запутан. Примечание: в примере с скриптом у меня есть точная CSS, которая будет скомпилирована Я также включил пример стиля пузыря.
SCSS:
form:not([novalidate]) {
input, textarea {
&:required {background: transparent url('/../../images/icons/red_asterisk.png') no-repeat 98% center;}
&:required:valid {background: transparent url('/../../images/icons/valid.png') no-repeat 98% center; @include box-shadow(0 0 5px #5cd053);border-color: #28921f;}
&:not(:focus):valid {box-shadow: none;border: 1px solid $g4;}
&:focus:invalid {background: transparent url('/../../images/icons/invalid.png') no-repeat 98% center; @include box-shadow(0 0 5px #d45252); border-color: #b03535}
}
}
span.formHintBubble {position:absolute; background:$g7; margin-top:50px;@include borderRadius(10px); padding:5px 40px 5px 10px; color:white; @include opacity(0.9); @include box-shadow(1px 1px 6px 1px rgba(0,0,0,0.2));
&:after {
@include triangle(30px, $g7, up); content: " "; margin-bottom:27px; left:25px;
}
.cross {background:black; border:1px solid $g3; @include borderRadius(10px); width:15px; height:15px; color:#fff; display:block; line-height:15px; position:absolute; right:5px; top:50%; margin-top:-7.5px; padding:0; text-align:center; font-size:10px; cursor:pointer;}
}
JAVASCRIPT:
Здесь мы можем сделать несколько прикольных вещей, чтобы использовать сообщения по умолчанию и наследовать их внутри вашего собственного «пузыря» или окна сообщения об ошибке.
var form = $('form');
var item = form.find(':invalid').first();
var node = item.get(0);
var pos = item.position();
var message = node.validationMessage || 'Invalid value.';
var bubble = $('<span/>').html('<span class="formHintBubble" style="left: ' + pos.left + 'px; top:' + pos.top + 'px;">' + message + '<div class="cross">X</div></span>').contents();
bubble.insertAfter(item);
Сообщение будет html5-сообщением по умолчанию, или вы можете переопределить его, передав его в переменную 'message' выше, довольно просто, хью!
DEMO:
http://jsfiddle.net/shannonhochkins/wJkVS/
Наслаждайтесь, и я надеюсь, что помогу другим с проверкой формы HTML5, так как это здорово, и это нужно сделать!
Shannon