JQuery UI для подтверждения формы - PullRequest
0 голосов
/ 18 января 2012

Это мой первый вопрос о StackOverflow, и я уже посещал все вопросы о jQuery Dialog & Forms, но все еще имею проблему.

Я пытаюсь реализовать в моей форме диалог подтверждения jQuery,Окно действительно появляется без проблем, но когда я нажимаю «Подтвердить», форма не отправляется ...

Это Javascript:

        // Form validation
        $(function(){
            var currentForm;
            $("#dialog-confirm").dialog({
                    autoOpen: false,
                    resizable: false,
                    modal: true,
                    buttons: {
                        'Confirm': function(e) {
                            currentForm.submit();
                            return true;
                        },
                        Cancel: function() {
                            $(this).dialog('close');
                            return false;
                        }
                    }
                });
            $("#news-listing").submit(function(e){
                currentForm=$(this);
                if($("#dialog-confirm").dialog("open"))
                {
                    return false;
                } 
            });
});

И есть HTML

<div id="dialog-confirm" title="Empty the recycle bin ?">
    <p><span class="ui-icon ui-icon-alert" style="float:left; margin: 20px 10px 20px 10px;"></span>These items will be permanently deleted and cannot be recovered. Are you sure?</p>
</div>

<form action="news/action/delete" id="news-listing">
<table id="users-listing">
    <tr>
        <th class="id">ID</th>
        <th class="title">Title</th>
        <th class="url">URL</th>
        <th class="modify">Modify</th>
        <th class="checkcell">Delete</th>
    </tr>   
    <tr class='alt'>
        <td class='id'>".$news['news_id']."</td>";
        <td class='title'>".$news['news_title']."</td>";
        <td>".$this->News->get_url($news['news_id'])."</td>";
        <td class='modify'><a href="modify/1">Modify</a></td>;
        <td><input type="checkbox" name="delete[]" /></td>
    </tr>
</table>
<input type="submit" name="submit" />
</form>

Заранее благодарю за помощь!

РЕДАКТИРОВАТЬ: Вот мой новый код, HTML не меняется.Теперь у меня есть диалоговое окно, но кнопка подтверждения не отправляется, кнопка отмены работает хорошо.

$(function() {   
                // Get the current form object 
                var currentForm = $("#news-listing");
                // Initialize dialog
                $("#dialog-confirm").dialog({
                    autoOpen: false,
                    resizable: false,
                    modal: true,
                    buttons: {
                        'Confirm': function() {
                            currentForm.submit();
                            return true;
                        },
                        Cancel: function() {
                            $(this).dialog('close');
                            return false;
                        }
                    }
                });

                // Validate the form
                $("#news-listing").validate({
                    rules:{
                        "delete[]":"required"
                    },
                    submitHandler: function(e){
                        $("#dialog-confirm").dialog("open");
                    }
                });
            });

Ответы [ 2 ]

1 голос
/ 18 января 2012

Проблема в том, что currentForm равно undefined при выполнении этой строки:

currentForm.submit();

Будет выдано сообщение об ошибке, поскольку undefined не имеет submit метода!

Вы пытаетесь установить значение currentForm в обработчике событий submit самой формы, поэтому вы страдаете от проблемы курицы и яйца.Вам необходимо назначить элемент формы для currentForm вне обработчика события:

$(function() {    
    var currentForm = $("#news-listing");
    $("#dialog-confirm").dialog({
        //Dialog options...
        //currentForm.submit() will now work here
    });
    $("#news-listing").submit(function(e) {
        //Event handler...
        //This will be executed when currentForm.submit() is called
    });
});
0 голосов
/ 18 января 2012

currentForm переменная должна быть инициализирована с элементом формы.

изменить

var currentForm;

на

var currentForm = document.getElementById("news-listing");
...