Форма отправки JQuery не работает в IE

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

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

  • РЕДАКТИРОВАТЬ *

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

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

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

(URL кредитной карты - скрытое поле)

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

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

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

РЕДАКТИРОВАТЬ

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

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

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

Хорошо, я гуглил, что 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();
},

4 ответа

У меня недавно была похожая проблема, когда я создавал "псевдо-форму" в форме сервера 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;
});

В конце концов, это работает удовольствие.

Изменение способа форматирования .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');
  });     
});

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

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

В нем есть те же основные функции, что и в любом другом отладчике сценариев, но вот руководство для конкретных функций, если вы не сталкивались с ним раньше:

Был бы try...catch заявление внутри each() выявить ошибку?

Другие вопросы по тегам