Jquery form submit не работает в IE
То, что мы пытаемся сделать здесь, состоит в том, что у нас есть форма с идентификатором upgrade_form. У нас также есть форма, называемая формой "paypal_submit". Эта форма пуста. "upgrade_form" имеет поля подробных данных фактуры (адрес, имя, срок действия и т.д.)
У нас есть только одна кнопка отправки, и логика заключалась в том, что она отправит форму, если установлен переключатель радиокарты, но будет отображаться нимомодальная (http://nyromodal.nyrodev.com), когда вы выберете переключатель PayPal и нажмите "Отправить".
Хорошо, мы полностью обновили весь процесс. Сначала мы добавили 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, но вот руководство по конкретным функциям, Прежде всего: