Jquery form submit не работает в IE

То, что мы пытаемся сделать здесь, состоит в том, что у нас есть форма с идентификатором upgrade_form. У нас также есть форма, называемая формой "paypal_submit". Эта форма пуста. "upgrade_form" имеет поля подробных данных фактуры (адрес, имя, срок действия и т.д.)

У нас есть только одна кнопка отправки, и логика заключалась в том, что она отправит форму, если установлен переключатель радиокарты, но будет отображаться нимомодальная (http://nyromodal.nyrodev.com), когда вы выберете переключатель PayPal и нажмите "Отправить".

  • EDIT *

Хорошо, мы полностью обновили весь процесс. Сначала мы добавили 2 скрытых поля, которые не включены в форму. Эти 2 поля содержат URL-адреса для кредитной карты и PayPal. Когда вы выбираете переключатель кредитной карты, вы получаете URL-адрес кредитной карты. Когда вы выбираете переключатель PayPal, вы получаете URL-адрес PayPal.

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

$('#upgrade_form').attr('action', $('#credit-card-target-url').val())

(credit-card-url - скрытое поле)

Итак, когда мы нажимаем на ссылку в лабиринте nyromodal, мы просто вызываем

$('#upgrade_form').submit();

НО! ЭТО ВСЕ ЕЩЕ НЕ РАБОТАЕТ. Любая помощь по этому поводу? Мы находимся в процессе установки предлагаемого отладчика IE script, но я пессимистичен, мы ничего не увидим.

ИЗМЕНИТЬ

Просто повторил этот. Мы достали лайтбокс и другой код. Мы только начали с базовой формы со ссылкой, которая при нажатии вызывает:

$('#upgrade_form').submit();

Все еще не работает в IE. Так это из-за submit() jquery?

Хорошо, что я googled для jquery submit не работает в IE и нашел это: jQuery form submit() не работает в IE6?

Но я проверил наш код, и наша кнопка "отправить" на самом деле является ссылкой, и я искал созданную документацию и не обнаружил никаких входов с именем submit. Когда клика нажата, я добавил предупреждение, чтобы проверить, существует ли форма (из-за нулевой проблемы nodeName), и я получаю предупреждение с формой html. Он просто останавливается при отправке.

вот код прямо сейчас:

$('#paypalbutton').click( function() {
  alert($('form#upgrade_form').html());
  $('form#upgrade_form').submit();
  return true;
}

IE останавливается в этой строке в jquery:

nodeName: function( elem, name ) {
  return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();
},

Ответ 1

У меня недавно была аналогичная проблема, когда я создавал "псевдо-форму" в форме сервера ASP.NET(поэтому я не мог использовать другой тег формы), который я хотел бы отправить в другой домен без необходимо написать код на стороне сервера, чтобы сделать удаленный пост. Легкий ответ - создайте форму на лету и отправьте ее. Работает в хороших браузерах...

После некоторых испытаний и невзгод я понял, что IE не будет работать так, как ожидалось (какой сюрприз), если только форма, которая отправляется, не добавлена ​​в DOM. Итак, это было мое решение. Надеюсь, это поможет некоторым из вас. Имейте в виду, что все мои входы и моя подача были в одном контейнере. ".post-to" - это скрытый ввод с URL-адресом.

$(".post-form").click(function(ev) {

    var postto = $(this).siblings(".post-to").val();    
    var form = document.createElement("form")
    $(form).attr("id", "reg-form").attr("name", "reg-form").attr("action", postto).attr("method", "post").attr("enctype", "multipart/form-data");

    $(this).siblings("input:text").each(function() {
        $(form).append($(this).clone());
    });

    document.body.appendChild(form);
    form.submit();
    document.body.removeChild(form);

    return false;
});

В конце концов, это работает.

Ответ 2

Изменение способа форматирования метода .each() похоже на трюк...

$('form#paypal-form').submit( function(e) {
  e.preventDefault();
  var parameters = $('form#upgrade_form').serializeArray();
  $(parameters).each(function(i,param){
    $('<input />').attr('type', 'hidden')
    .attr('name', param.name)
    .attr('value', param.value)
    .appendTo('form#paypal-form');
  });     
});

Ответ 3

Выскажет ли оператор try...catch внутри each() ошибку?

Ответ 4

Если вы еще этого не сделали, вы можете попробовать выполнить его через встроенный отладчик IE JavaScript (встроенный с IE8 или загружаемый до IE8)?

Многие люди используют firebug - потому что это потрясающе:), но многие люди не понимают скрытый талант встроенного отладчика в IE 8.

Он получил те же основные функции, что и любой другой отладчик script, но вот руководство по конкретным функциям, Прежде всего: