Форма отправки JQuery не работает в IE - PullRequest
4 голосов
/ 22 сентября 2010

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

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

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

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

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

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

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

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

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

, НО! ВСЕ ЕЩЕ НЕ РАБОТАЕТ.находится в процессе востановка предлагаемого отладчика сценариев IE, но я пессимистичен, мы ничего не увидим.

EDIT

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

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

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

Хорошо, я гуглил, что jquery submit не работает в IE и обнаружил следующее: jQuery form submit () не работает в IE6?

Но я проверил наш код и нашКнопка «Отправить» на самом деле является ссылкой, и я искал сгенерированный документ и не нашел никаких входных данных с именем «Отправить».Когда ссылка нажата, я добавил предупреждение, чтобы проверить, существует ли форма (из-за нулевой проблемы с 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 ]

14 голосов
/ 14 июля 2011

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

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

1 голос
/ 22 сентября 2010

Изменение способа, которым вы отформатировали метод .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');
  });     
});
0 голосов
/ 22 сентября 2010

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

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

У него те же функциональные возможности, что и у любого другого отладчика сценариев, но вот руководство для конкретногоОсобенности , если вы еще не сталкивались с этим:

0 голосов
/ 22 сентября 2010

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

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