jQuery с использованием формы, сгенерированной $ .ajax - PullRequest
0 голосов
/ 26 апреля 2011

jQuery новичок здесь с проблемой ...

Я делаю некоторую проверку на стороне сервера и создаю новую форму с кнопками «Подтвердить» и «Отмена» с помощью вызова $ .ajax.Это работает хорошо, но я хотел бы сделать то же самое, чтобы обработать кнопки подтверждения / отмены на форме, которая создается, но это не работает.

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

Мой код jQuery javascript: -

$(document).ready(function () {
    //if submit button is clicked on order form
    $('#submit').click(function () {

        //show the loading sign
        $('.loading').show();


        $.ajax({
            url: 'inc/ajax_checkorder.asp',
            type: "GET",
            data: data,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            cache: false,
            success: function (response) {
                var message = (typeof response.jsonresp) == 'string' ? eval('(' + response.jsonresp + ')') : response.jsonresp;
                $('#message').empty();
                if (message[0].ok == '1') {
                    $('#intromsg').hide('slow');
                }
                $('#message').append(message[0].msg);
            },
            error: function (xhr, err) {
                alert("readyState: " + xhr.readyState + "\nstatus: " + xhr.status);
                alert("responseText: " + xhr.responseText);
            }
        });

        //cancel the submit button default behaviours
        return false;
    });

    //if submit button is clicked on confirmation form
$('#confirm').live('confirm', function () {

    $(this).click(function () {

        //show the loading sign
        $('.loading').show();

        $.ajax({
            url: 'inc/ajax_sendorder.asp',
            type: "GET",
            data: data,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            cache: false,
            success: function (response) {
                var message = (typeof response.jsonresp) == 'string' ? eval('(' + response.jsonresp + ')') : response.jsonresp;
                $('#message').empty();
                if (message[0].ok == '1') {
                    $('#ordermsg').hide('slow');
                }
                $('#message').append(message[0].msg);
            },
            error: function (xhr, err) {
                alert("readyState: " + xhr.readyState + "\nstatus: " + xhr.status);
                alert("responseText: " + xhr.responseText);
            }
        });
        return false;
    });
  });
});

Спасибо за любую помощь!

epx

Ответы [ 4 ]

0 голосов
/ 26 апреля 2011

используйте плагин livequery jquery, это облегчит вашу жизнь .. livequery

прикрепите к запросу, который создает данные на лету.

0 голосов
/ 26 апреля 2011

Вы правы, .click () применяется только к тому, что существует в настоящее время. Лучше всего поместить объект из вашего .click () в функцию-оболочку и вызвать его в вашем document.ready, а затем вызвать его снова в обратном вызове .ajax, чтобы повторно применить его к возвращаемому содержимому.

0 голосов
/ 26 апреля 2011

Я не проверял код во время выполнения, но он может работать, если вы инкапсулируете привязку #confirm в другую функцию и вызываете ее, когда первый вызов успешен.

function bindConfirm() {
    $('#confirm').live('confirm', function () {

        $(this).click(function () {

            //show the loading sign
            $('.loading').show();

            $.ajax({
                url: 'inc/ajax_sendorder.asp',
                type: "GET",
                data: data,
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                cache: false,
                success: function (response) {
                    var message = (typeof response.jsonresp) == 'string' ? eval('(' + response.jsonresp + ')') : response.jsonresp;
                    $('#message').empty();
                    if (message[0].ok == '1') {
                        $('#ordermsg').hide('slow');
                    }
                    $('#message').append(message[0].msg);
                },
                error: function (xhr, err) {
                    alert("readyState: " + xhr.readyState + "\nstatus: " + xhr.status);
                    alert("responseText: " + xhr.responseText);
                }
            });
            return false;
        });
      });
    });
}

После этогопросто вызовите bindConfirm (), когда вызов ajax завершится успешно.Привет.

0 голосов
/ 26 апреля 2011

Ваши подозрения верны.Вам нужно отменить привязку , затем перепривязать событие щелчка для кнопки «подтвердить», поскольку первое событие связано с чем-то, что больше не находится в DOM (даже если оно имееттот же идентификатор).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...