2013-01-21 5 views
0

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

Код для проверки доступности:

function checkUsername() { 
$.post('php/availability.php',{username: $('#username').val()}, function(usernamedata){ 
if(usernamedata.exists){ 
    $("#username").css('background-image','url(images/in-use.png)'); 
    $("#username-use").val("inuse"); 
}else{ 
    $("#username").css('background-image','none'); 
    $("#username-use").val("free"); 
} }, 'JSON'); } 

Код для проверки электронной почты является точно такой же, помимо очевидных различий. Он проверяет базу данных для сопоставления имени пользователя/электронной почты и устанавливает значение скрытого поля в зависимости от результата. По умолчанию скрытые поля установлены как «свободные».

Это код, который должен отключить кнопку регистрации, если для имени пользователя или электронной почты установлено значение «inuse». Однако, похоже, у него есть собственный ум, и я не могу понять, как он достигает своего конечного результата.

function buttonCheck() { 
var username = $("#username-use").val(); 
var email = $("#email-use").val(); 
if(username == "free" && email == "free") { 
    $("#registration-send").attr('disabled','disabled'); 
} 
else { 
    $("#registration-send").removeAttr('disabled'); 
} } 

Кажется, что он работает в обратном направлении, позволяя кнопке, когда что-то «используется». Я попытался поменять местами, но ничего не меняет.

checkUsername()/checkEmail() и buttonCheck() оба созвав OnChange их ассоциированных входов:

<input id="username" name="username" type="text" autocomplete="off" maxlength="100" class="req-string" onChange="checkUsername(); buttonCheck()"> 
+0

У меня есть ощущение, что это может быть реализовано в более изящным способом с $ (х) .focus() - 'http://api.jquery.com/focus/'. Вы рассматривали этот вариант? – theMarceloR

+0

Да, это выглядит более элегантно. Может ли он использоваться в «функции запуска при удалении фокуса»? – Adam

ответ

0

Свободный наконечник: объять функции обратного вызова

function checkUsername() { 
$.post('php/availability.php',{username: $('#username').val()}, function(usernamedata){ 
if(usernamedata.exists){ 
    $("#username").css('background-image','url(images/in-use.png)'); 
    $("#registration-send").attr('disabled','disabled'); 
}else{ 
    $("#username").css('background-image','none'); 
    $("#registration-send").removeAttr('disabled'); 
} }, 'JSON'); } 

Вы не делаете необходимо установить какое-то скрытое поле. Лучший способ - справиться с этим в своем обратном вызове успеха.

Также вы можете написать аналогичный код для проверки адреса электронной почты атомарности.

UPDATE ::

var correctUsername=0,correctEmail=0; 

function checkUsername() { 
$.post('php/availability.php',{username: $('#username').val()}, function(usernamedata){ 
if(usernamedata.exists){ 
    $("#username").css('background-image','url(images/in-use.png)'); 
    $("#registration-send").attr('disabled','disabled'); 
    correctUsername=0; 
}else{ 
    $("#username").css('background-image','none'); 
    correctUsername=1; 
    if(correctEmail==1){ 
     $("#registration-send").removeAttr('disabled'); 
    } 
} }, 'JSON'); } 

Повторите подобный код для электронной почты, где вы будете устанавливать correctEmail=1 и removeAttr если correctUsername==1

+0

Это то, что у меня было раньше, но оно проверяет себя самостоятельно. Поэтому, если у меня было имя пользователя, которое уже использовалось, и набрал письмо, которое было в порядке, оно снова включило бы кнопку независимо от проверки имени пользователя. – Adam

+0

Я вижу :: обновлено! – AdityaParab

+0

Я думаю, что мы приближаемся, но я все еще могу вернуть кнопку, если один из них все еще используется. Если последняя проверка в порядке, она переопределит все, которые по-прежнему недействительны. – Adam

Смежные вопросы