Ошибка при запуске Jquery Blur для работы над элементом
0 jchapa [2009-12-17 09:03:00]
Я разрабатываю форму, которая позволяет пользователям вводить данные своей кредитной карты для завершения транзакции. Я проверяю на сервере, но хочу также обеспечить гладкую проверку клиента. Я использую ASP.NET MVC с JQuery.
Я использую функцию размытия JQuery для выполнения javascript всякий раз, когда кто-то перемещает фокус в сторону от поля. Затем javascript определит, была ли она действительной записью, а затем либо показывает "проверку", либо "крест", чтобы помочь пользователю внести поправки в форму.
Пока он работает для одного поля (срок действия кредитной карты). Он не работает ни для одного из других элементов, хотя (попробовал его с номером кредитной карты и почтовым индексом). Используя Firebug, даже не кажется, что другие размытия срабатывают. Пожалуйста помогите. Спасибо!
Вот мой JQuery:
$(document).ready(function() {
// Hide all of the validation checkers
$('#credit-card-number-validator').hide();
$('#credit-card-number-correct').hide();
$('#credit-card-expiration-validator').hide();
$('#credit-card-expiration-correct').hide();
$('#zip-validator').hide();
$('#zip-correct').hide();
// Check Zip Code
$('#donor-zip').blur(function() {
$('#zip-validator').show();
$('#zip-correct').show();
var enteredValue = $('#donor-zip').val();
var regex = new RegExp(/^\d{5}$|^\d{5}-\d{4}$/);
var isValid = regex.exec(enteredValue);
if (isValid == null) {
$('#zip-correct').hide();
$('#zip-validator').show();
if (enteredValue == "") {
$('#zip-validator').hide();
}
}
else {
$('#zip-validator').hide();
$('#zip-correct').show();
}
});
// Credit Card Number Checker
$('#donor-credit-card-number').blur(function() {
$('#credit-card-number-validator').show();
$('#credit-card-number-correct').show();
var enteredValue = $('#donor-credit-card-number').val();
var regexCard = new RegExp(/^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13})$/);
var isCardValid = regexCard.exec(enteredValue);
if (isCardValid == null) {
$('#credit-card-number-validator').show();
$('#credit-card-number-correct').hide();
if (enteredValue == "") {
$('#credit-card-number-validator').hide();
}
}
else {
$('#credit-card-number-validator').hide();
$('#credit-card-number-correct').show();
}
});
// Expiration Date Checker
$('#donor-credit-card-expiration-date').blur(function() {
$('#credit-card-expiration-validator').show();
$('#credit-card-expiration-correct').show();
var enteredValue = $('#donor-credit-card-expiration-date').val();
var regex = new RegExp(/^(\d{2})1[0-9]$/);
var isValid = regex.exec(enteredValue);
if (isValid == null) {
$('#credit-card-expiration-correct').hide();
$('#credit-card-expiration-validator').show();
if (enteredValue == "") {
$('#credit-card-expiration-validator').hide();
}
}
else {
$('#credit-card-expiration-validator').hide();
$('#credit-card-expiration-correct').show();
}
});
});
Вот код из моего представления (для этой части):
<div id="donor-zip" class="textlabel">Zip Code:<br /> <%= Html.TextBox("donor-zip", null, new { @class = "textinput" })%> <span id="zip-validator"> <img src="<%= Url.Content("~/content/images/12-em-cross.png") %>" /></span> <span id="zip-correct"> <img src="<%= Url.Content("~/content/images/12-em-check.png") %>" /></span></div>
...
<div id="donor-credit-card-number" class="textlabel">Credit Card Number:<br /> <%= Html.TextBox("donor-credit-card-number", null, new { @class = "textinput" })%> <span id="credit-card-number-validator"> <img src="<%= Url.Content("~/content/images/12-em-cross.png") %>" /></span> <span id="credit-card-number-correct"> <img src="<%= Url.Content("~/content/images/12-em-check.png") %>" /></span> </div>
<div id="donor-credit-card-expiration" class="textlabel">Card Expiration Date:<br /> <%= Html.TextBox("donor-credit-card-expiration-date", null, new { @class = "textinput" })%> <span id="credit-card-expiration-validator"> <img src="<%= Url.Content("~/content/images/12-em-cross.png") %>" /></span> <span id="credit-card-expiration-correct"> <img src="<%= Url.Content("~/content/images/12-em-check.png") %>" /></span> </div>
jquery asp.net-mvc
2 ответа
2 Решение micahwittman [2009-12-17 10:20:00]
Похоже, проблема в том, что вы выбираете элемент DIV, который обертывает вход. События размытия, которые вы хотите, находятся на элементах INPUT.
Пример одного способа выбора INPUT в DIV:
$('#donor-credit-card-number input').blur(function(){
//etc...
});
1 griegs [2009-12-17 09:48:00]
Это много кода для траления через @jchapa.:)
Однако он может заплатить за использование имен классов вместо волевых идентификаторов.
Итак <div id="donor-credit-card-number" class="textlabel Donor-Credit-Card-Number">
, а затем используйте точечную нотацию в вашем jQuery, например $('.Donor-Credit-Card-Number').blur
.
Таким образом, независимо от того, каким будет ваш идентификатор, код будет работать.
Это может не решить вашу проблему, но это вызовет зависимость вашего идентификатора от правильности работы jQuery.
Я знаю, что фреймворк mvc обычно не изменяет имена ваших элементов управления на ctrl000_, что никогда, но вы никогда не знаете.
Если это не сработает, удалите весь код между скобками размытия и вставьте в блокнот и замените код предупреждениями, чтобы узнать, что стреляет, а что нет.
По крайней мере, у вас есть небольшая база кода для прохождения.
затем добавьте свой код назад по строкам.