Проблема проверки jQuery в диалоговой форме

0

У меня есть форма входа в систему, как показано ниже,

<a href="#" id="loginLink">click Here to Log in</a>
<div class="formDiv" id="formDiv">
<form name="loginForm" id="loginForm" action="#">
    <label>Email</label><input type="text" name="email" id="email"><br/>
    <label>Passw</label><input type="password" name="pwd" id="pwd"><br/>
    <input type="submit" value="Log in" id="loginbtn" name="loginbtn">
</form>
</div>

Я показываю выше форму пользователям, использующим jQuery Dialog, если форма без диалогового окна (i, e обычный HTML), то проверки делают без каких-либо проблем с его jsfiddle, но если я показываю форму в диалоговом окне, тогда проверки не выполняют ее jsfiddle, могу я знать причину этого?

  • 0
    Не по теме: «Вопросы, касающиеся проблем с написанным вами кодом, должны содержать описание конкретной проблемы - и включать действительный код для ее воспроизведения - в самом вопросе . См. SSCCE.org для получения рекомендаций». Где все ваши JQuery?
Теги:
jquery-validate
jquery-dialog

2 ответа

2

TRy http://jsfiddle.net/devmgs/WNMfA/12/

$ (Документ).ready (функция() {

$("a#loginLink").on("click",function(e){
  e.preventDefault();

  $(".formDiv").dialog({
            closeOnEscape: false,
            title:"Login Form",
            modal: true,
            resizable: false,
            width:'350px',
            position:'fixed',

            close:function()
            {                    
                $(".ui-dialog-content").dialog("close");
            }
        });  
});

Используйте $ (". FormDiv") и не создавайте его внутри открытой функции.

1

У вас есть несколько серьезных недостатков...

1) Ваш код, который вызывает .validate()...

$(document).on("click", '#loginbtn', function(e){
    e.preventDefault();
    $("#loginForm").validate();        
    alert('test');  
    //I want to do Ajax stuff   
});

Не вызывайте .validate() в обработчике click потому что его нужно только вызвать один раз. Метод .validate() не является методом вызова валидации в форме. Это только метод инициализации плагина на форме. Так, как и в вашем рабочем примере, вы должны вызвать .validate() как только будет создана форма, которая обычно находится в событии готовности DOM. Можно удалить всю обработанную функцию on('click') выше.

2) Ваш код, который открывает диалоговое окно...

open:function(){                   
    $(this).html($("#formDiv").html());
},

В вашем open обратном вызове вы дублируете HTML из скрытого div в свой div dialog для формы. Основная проблема с этим методом заключается в том, что теперь у вас есть более одного элемента на одной странице с одним и тем же id. Этот недействительный HTML не только HTML, но плагин jQuery Validate применим только к первому экземпляру - исходному скрытому экземпляру этого id. Удалите open обратный вызов и прикрепите скрытый div к .dialog() следующим образом: $("#formDiv").dialog(...

3) В вашем комментарии указано, что вы хотите отправить эту форму с помощью ajax(). В этом случае используйте submitHandler обратного вызова submitHandler плагина jQuery Validate. Согласно документации, это "правильное место для отправки формы через Ajax после ее проверки".

$("#loginForm").validate({ // initialize the plugin
    submitHandler: function (form) {
        // your ajax here;               // submit the data
        $("#formDiv").dialog("close");   // close the dialog
        alert('submitted with ajax');    // for demo 
        return false;                    // prevent regular form submit action
    }
});

Рабочий ДЕМО: http://jsfiddle.net/TRHxZ/

$(document).ready(function () {

    $("#loginForm").validate({ // initialize the plugin
        submitHandler: function (form) {
            // your ajax here;               // submit the data
            $("#formDiv").dialog("close");   // close the dialog
            return false;                    // prevent regular form submit action
        }
    });

    $("a#loginLink").on("click", function (e) {
        e.preventDefault();

        $("#formDiv").dialog({
            closeOnEscape: false,
            title: "Login Form",
            modal: true,
            resizable: false,
            width: '350px',
            position: 'fixed',
            close: function () {
                $(".ui-dialog-content").dialog("close");
            }
        });
    });

});
  • 0
    Вы сказали, что мой вопрос является оффтопом, через 1 час вы дали длинный ответ, хотя предыдущие ответы кратко описали то же самое, во всяком случае, спасибо за ваши усилия ответить на мой оффтопный вопрос.
  • 0
    @ Mahesh.D, это просто не по теме, потому что в вопросе не указан полный код. Скопируйте код jQuery из jsFiddle в ваш OP, и он будет по теме.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню