2013-09-15 4 views
0

EDIT:document.getElementById('submit').disabled='disabled'; делает трюк, если я поставлю его вместо return false;, но по некоторым причинам, он также блокирует кнопку, когда имя пользователя не принимается.PHP отправки формы и проверки AJAX


Ниже приведен базовый сценарий для проверки доступности имени пользователя.

Как я могу предотвратить отправку формы, если имя пользователя уже занято?

В идеале я хотел бы, чтобы окно предупреждения JS всплывало.

Я попытался добавить это в JS, но не получилось:

document.getElementById('submit').disabled

Также я пытался добавить onclick="return validate();" к самой форме, но не повезло либо: форма до сих пор все еще могут быть представлены.

HTML

<form id="edit" action="edit.php" method="post"> 
    <fieldset>  
    <label>Username</label><input type="text" class="input" name="username"  
    id="username"/><span id="status"></span> 
    <button type="submit" id="submit" value="add">Save</button> 
    </fielset> 
</form> 

Script

<script type="text/javascript"> 
$(document).ready(function() { 
    $("#username").change(function() { 
     var username = $("#username").val(); 
     var msgbox = $("#status"); 

     if (username.length >= 4) { 
      $("#status").html('<img src="images/gif/ajax-loading.gif">'); 

      $.ajax({ 
       type: "POST", 
       url: "ajax_check.php", 
       data: "username=" + username, 
       success: function(msg) { 

        if (msg == 'OK') { 

         msgbox.html('<img src="/images/yes.png">'); 
         return true; 

        } else { 
         msgbox.html(msg);    
         return false; 

        } 
       } 
      }); 
     } else { 

      $("#status").html('<img src="/images/no.png">too long!'); 
      return false; 
     } 
     return false; 
    }); 
}); 

edit.phpajax_check.php и содержат только некоторые запросы SQL.

Кроме того, некоторые пользователи отключили JavaScript в своем браузере, как я мог обойти это?

+0

Я думаю, что 'onclick =" return validate(); "' должен делать трюк. Где вы это разместили? он должен быть в элементе кнопки. Невозможно принудительно выполнить JS-исполнение, на самом деле к странице можно получить доступ с помощью некоторых утилит загрузки (например, wget), которые не имеют представления о том, что такое JS. :) –

+0

@AntoanMilkov Я только что сделал, как вы сказали, и все же кнопка отправки по-прежнему доступна для кликов, поэтому форма отправляется. Мне действительно нужно убедиться, что ни у одного клиента не может быть того же самого. –

+0

Должно ли это быть на форме 'onsubmit' event? Подобно '

'. –

ответ

1

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

if (msg == 'OK') {      
      msgbox.html('<img src="/images/yes.png">'); 
      document.getElementById('submit').disabled = false; //enable submit 

     } else {      
      msgbox.html(msg);    
      document.getElementById('submit').disabled = 'disabled'; //disable submit 
     } 
+0

Спасибо! Он работает сейчас! Также, что я должен делать для пользователей с отключенным Javascript. Есть ли способ обойти это, а также использовать некоторые PHP для отключения кнопки? –

+0

Вы не должны полагаться только на проверку на стороне клиента. Также используйте правильную проверку на стороне сервера. Проверка на стороне клиента - это просто для лучшего удобства пользователей. Любой может обойти эти проверки. Вы можете проверить, зарегистрирован ли пользователь или нет после отправки формы, и соответствующим образом отобразить соответствующее сообщение. – Konsole

1

Вы можете добавить атрибут к элементу формы

onsubmit="return validate();" 

Если JavaScript отключен, то нет ничего, что вы можете с этим поделать. Вот почему настоятельно необходимо применять валидацию/санкционирование данных на стороне сервера.

+0

спасибо, но форму можно отправить. Чтобы быть ясным, 'onsubmit =" return validate(); "' должны быть местами в кнопке отправки, правильно? –

+0

@BenRifff, нет, его можно разместить в любом месте, просто в другом синтаксисе. – jeff

+0

Спасибо @jeff, но все еще не работает ... –

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