прекратить отправку формы в Internet Explorer - PullRequest
1 голос
/ 01 февраля 2011

Я улавливаю отправку формы с помощью jquery.

Этот обработчик отправки работает во всех браузерах, кроме Internet Explorer, где он просто отправляет.

Как это исправить?

$('#editForm').live('submit', function() {
        var data = [];
        var finalForm = $(this).serializeArray();
        var differences = 0;
        for (var i in initialForm) {
            if (!objectsAreSame(initialForm[i], finalForm[i])) {
                data[differences] = finalForm[i];
                differences++;
            }
        }
        console.log('diff: ', differences);
        if (differences > 0) {
            $.ajax({
                url: site_url + 'ajax/contact',
                type: 'POST',
                data: {
                    id: finalForm[0].value,
                    method: 'editContact',
                    data: JSON.stringify(data)
                },
                success: function(data) {
                    console.log(data);
                    $('#contact' + finalForm[0].value).hide("drop", {direction: 'up'}, 500, function() {
                        $('#contact' + finalForm[0].value).replaceWith(data);
                        $('#contact' + finalForm[0].value).show("drop", {direction: 'up'}, 500, function() {
                            $(document).trigger('close.facebox');
                        });
                    });
                    return false;
                }
            });
        }
        return false;
    });

похоже, что он даже не подключает обработчик отправки ... выполнение прямого возврата false ничего не делает ...

Ответы [ 3 ]

4 голосов
/ 01 февраля 2011

Удалить все console.log() звонки из вашего кода. Это приведет к ошибке в IE, и return false не будет вызван.

1 голос
/ 01 февраля 2011

Добавьте к своей функции: проверьте в IE, а затем верните false. Также проверьте, можно ли вызвать preventDefault(), и вызовите его, если он есть. Также измените вызов функции на $('#editForm').live('submit', function(e), чтобы передать событие в функцию:

// For IE:
if ($.browser.msie) e.returnValue = false;
// Otherwise: 
if(e.preventDefault) e.preventDefault();
0 голосов
/ 01 февраля 2011

Прежде всего, ваш код недостаточно аккуратен для чтения;Прочитайте это I4 пути улучшения кодирования jQuery

В любом случае ниже приведены некоторые подсказки

  • Удалить console.log() заявления
  • Проверьте, где расположение оператора return
  • Используйте отладчик IE, чтобы поймать значение (разницу)
  • Используйте оператор if(..){ }else{ } вместо if(...){ } отдельно

И, наконец, я думаю, что это должно быть написано так;проверьте, где первый оператор возврата равен

$('#editForm').live('submit', function() {
    var data = [];
    var finalForm = $(this).serializeArray();
    var differences = 0;
    for (var i in initialForm) {
        if (!objectsAreSame(initialForm[i], finalForm[i])) {
            data[differences] = finalForm[i];
            differences++;
        }
    }
    console.log('diff: ', differences);
    if (differences > 0) {
        $.ajax({
            url: site_url + 'ajax/contact',
            type: 'POST',
            data: {
                id: finalForm[0].value,
                method: 'editContact',
                data: JSON.stringify(data)
            },
            success: function(data) {
                console.log(data);
                $('#contact' + finalForm[0].value).hide("drop", {direction: 'up'}, 500, function() {
                    $('#contact' + finalForm[0].value).replaceWith(data);
                    $('#contact' + finalForm[0].value).show("drop", {direction: 'up'}, 500, function() {
                        $(document).trigger('close.facebox');
                    });
                });                   
            }
        });
        return false;
    }
    return false;
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...