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

#php #javascript #jquery #html #ajax

#php #javascript #jquery #HTML #ajax

Вопрос:

Я проверил доступность имени пользователя. Проблема в том, что даже если имя пользователя недоступно, форма публикуется.

Отредактированный код:

 <SCRIPT type="text/javascript">
$(document).ready(function(){

$("#emailch").change(function() { 

    var usr = $("#emailch").val();
    if(usr.length >= 3)
    {
        $("#status").html('<img src="images/loader.gif" align="absmiddle">amp;nbsp;Checking availability...');
        $.ajax({  
            type: "POST",  
            url: "includes/check.php",  
            data: "username="  usr,  
            success: function(msg){   
                $("#status").ajaxComplete(function(event, request, settings){ 
                    if(msg == 'OK')
                    { 
                        $("#username").removeClass('object_error'); // if necessary
                        $("#username").addClass("object_ok");
                        $(this).html('amp;nbsp;<img src="images/tick.gif" align="absmiddle">');

                    }
                    else
                    {
                        $("#username").removeClass('object_ok'); // if necessary
                        $("#username").addClass("object_error");
                        $(this).html(msg);


                    }

                });

            }
        }); 
    }

    else
    {
        $("#status").html('<font color="red">The username should have at least <strong>3</strong> characters.</font>');
        $("#username").removeClass('object_ok'); // if necessary
        $("#username").addClass("object_error");
    }

});

});
</SCRIPT>
  

Чего я хочу, так это того, что форма не должна публиковаться, если имя пользователя недоступно. Я пытался использовать return false; в УСЛОВИИ IF, но это не удается. Пожалуйста, предложите любой альтернативный метод. Мы будем признательны за любую помощь.

Комментарии:

1. Откуда вы вызываете этот код? Покажите нам контекст этого. return false; будет работать, вам просто нужно поместить его в нужное место.

2. Где вызывается эта функция? Внутри обработчика onsubmit?

3. @Ян Ханчич, Салман , Код отредактирован. Пожалуйста, проверьте!

Ответ №1:

при отправке возвращает false независимо ни от чего, если поле исправно, отправляйте форму на ajax, если она плохая, с ошибкой или что вам нужно

 <form action="http://www.google.com" id="formId" method="post">
<input type="text" id="emailch" name="emailch" />
<input type="submit" />
</form>


<script type="text/javascript">

$(document).ready(function(){

    $("#formId").submit( function() { 

        if( $("#emailch").val().length >= 3){
            alert( 'the form is going to post via ajax here' );
        }else{
            alert( 'user name invalid error out or whatever you need to do.' );
        }
        return false;
    });
});
</script>
  

Ответ №2:

Использование return false для остановки отправки формы на самом деле не очень хорошо работает в jQuery. Вместо этого используйте event.preventDefault(), попробуйте что-то вроде этого:

 $(function() {
    $('#formid').submit(function(event) {
        if ($("#emailch").val().length < 3) {
            event.preventDefault();
        }
    });
});
  

Комментарии:

1. return false; работает просто отлично, с какими проблемами вы сталкиваетесь при этом?

2. О, похоже, вы правы. Я отчетливо помню, как тестировал это некоторое время назад, и я не думаю, что тогда это сработало (но event.preventDefault() сработал). Должно быть, что-то перепутал.

Ответ №3:

Установите флаг (переменную) в вашей success функции на false (например), если имя пользователя недоступно. Затем установите этот флаг в onsubmit обработчике вашей формы, и если флаг равен false, верните false из этого обработчика событий, и ваша форма не будет отправлена.