Я использую jQuery mobile
тему и jQuery validate plugin
для проверки. Поведение плагина не ожидается. Во-первых увидеть мой HTML кодjQuery validate плагин работает неожиданно
<ul data-role="listview" data-inset="true" id="updatepage">
<form method="POST" action="/update-account-info" accept-charset="UTF-8" data-ajax="false" id="updateUser">
<div data-role="content">
<li data-role="fieldcontain">
<input required="required" class="slide1el" id="first_name" data-clear-btn="true" placeholder="First Name" name="first_name" type="text" value="Awais">
<div class="error-wrapper"></div>
</li>
<li data-role="fieldcontain">
<input class="slide1el" id="last_name" data-clear-btn="true" placeholder="Last Name" name="last_name" type="text" value="Qarni">
<div class="error-wrapper"></div>
</li>
<li data-role="fieldcontain">
<input class="slide1el" id="website" data-clear-btn="true" placeholder="Website URL" name="website" type="text">
<div class="error-wrapper"></div>
</li>
<div>
<div class="ui-block-a"><button type="button" data-theme="a">Cancel</button></div>
<div class="ui-block-b"><button type="submit" data-theme="a">Submit</button></div>
</div>
</div>
</form>
</ul>
А вот мой javascrip
код
jQuery("#updateUser").validate({
errorElement: "label",
focusCleanup: true,
rules: {
first_name: {
required : true
},
last_name: {
required : true
},
website: {
required : true,
url : true
}
},
messages : {
first_name : {
required : 'First Name is required',
},
last_name : {
required : 'Last Name is required',
},
website : {
required : 'Website is required',
url : 'Please enter correct URL'
}
},
onkeyup: false,
errorPlacement: function (error, element) {
element.parents('li').find('div.error-wrapper').html(error)
element.parents('li').find('div.error-wrapper').find('label').removeClass('error_text');
},
// set the errorClass as a random string to prevent label disappearing when valid
errorClass : "error_text",
validClass : "ui-focus",
// use highlight and unhighlight
highlight: function (element, errorClass, validClass) {
jQuery(element).parent().addClass(errorClass).removeClass(validClass);
},
unhighlight: function (element, errorClass, validClass) {
jQuery(element).parent().removeClass(errorClass)
jQuery(element).parent().next().find('label').remove();
jQuery(element).parent().parent().next().find('label').remove();
}
});
То, что я сейчас делаю, что, когда пользователь отправляет форму, я пытаюсь проверить форму. Если поле ввода пуст, добавьте красную рамку в поле и покажите собственное сообщение об ошибке в div class=error-wrapper
.
Но когда я отправляю кнопку ошибки, она создает фокус только на первом пустом поле, которое оно находит в DOM. И когда я нажимаю в любом месте DOM, он показывает класс ошибки и выделяет текстовое поле. Я видел его в firebug, когда я нажимаю кнопку отправки, он добавляет класс ui-focus
в пустой элемент. Когда я нажимаю в любом месте DOM, класс ui-focus
автоматически удаляется, и мои классы ошибок добавляются.
Я даже попытался удалить класс ui-focus
, но он не работает. Пожалуйста, помогите мне, что я делаю неправильно?
Каждый текстовое поле имеет wrapper div, который я хочу высветить в случае ошибок. Вот почему я использовал это. –
Ах, ОК - в этом случае просто избавьтесь от линий 2-3 в своем классе «невысокой», вам не нужно это самостоятельно, это позаботится. – Ryley
Я думаю, что в этом случае вам необязательно нужны опции «focus *»? В любом случае, он отлично работает: http://jsfiddle.net/ryleyb/DC5Sz/3/ – Ryley