2013-02-19 5 views
2

Я не могу получить .submit() для jQuery для работы в IE или Firefox, когда передаю форму как текст для объекта jQuery ,

Например, следующий код работает в Chrome и Safari, но в IE и Firefox ничего не происходит - нет ошибок, нет ничего:

$('<form id="frm" action="http://www.stackoverflow.com" method="POST"></form>') 
    .submit(); 

ПРИМЕЧАНИЯ: «http://www.stackoverflow.com» выше и пустая форма просто пример. В моем приложении у моей формы есть законный URL-адрес для «action =», который принимает данные POST, которые я указываю как скрытые элементы управления в динамически построенной форме.

Если я вместо этого загружаю сконструированную форму в элемент в html, а затем выполняю $('#frm').submit(), он работает; однако я бы предпочел не идти этим путем.

Является ли это известным/ожидаемым поведением или я делаю что-то неправильно?

~ ~ ~

В ответ на @DavidThomas, я построения <form> через .get() вызова обработчика .ashx ASP .NET. Я пытаюсь свести к минимуму воздействие на <form> и его содержимое.

$.get('./ConstructForm.ashx', function (data) { $(data).submit(); }) 
    .fail(function() { alert('fail!'); }); 

Я, конечно, приветствуется рекомендации для более безопасного способа сделать это, но это, вероятно, будет предметом другого вопроса.

~ ~ ~

Для чего это стоит, мой подход был изначально основан на следующем: https://stackoverflow.com/a/2054741/1530187

Я пытаюсь сделать это, используя сконструированную строку для объекта JQuery, вместо существующего элемента, в целях сведения к минимуму возможности пользователя проверять форму перед отправкой или после отправки через браузер.

+4

Он должен быть частью DOM, прежде чем он будет работать. В противном случае его просто фрагмент не привязан. – prodigitalson

+0

Это может быть из соображений безопасности или что-то еще, но я думаю, что IE/FFX не будет отправлять формы, которые не находятся в текущем документе. Вы можете просто добавить его к '', а затем отправить его сразу. –

+1

'$ ('

')' * создает * форму; он не добавляет его в документ. Пока он не будет прикреплен, обработчик 'submit()' не будет/не сможет ничего сделать. Он не может быть представлен до тех пор, пока он не будет доступен пользователю. Кроме того, на сервер отправляются только успешные элементы формы; так как ваша форма не содержит каких-либо элементов, вам нечего подавать. Итак ... надеюсь, вы просто выбрали действительно плохой способ представить свой прецедент. Что вы на самом деле получили? –

ответ

0

Вы должны поместить форму в HTML, код, как показано ниже

var yourform = $('<form id="frm" action="http://www.stackoverflow.com" method="POST"></form>'); 

yourform.attr('target', '_blank'); //open in a new tab 
yourform.appendTo($(document.body)); // put your form into html 
yourform.submit(); 

Он работает в IE и Firefox.

Смежные вопросы