JavaScript отправляет данные формы в новое окно без "цели" - PullRequest
3 голосов
/ 12 февраля 2010

Что? * * 1002 Я хотел бы иметь возможность отправлять пост-запрос (не обязательно данные формы) в новое окно без использования целевого атрибута (проверка XHTML).

Почему? У меня есть веб-приложение (с использованием jQuery), где пользователь выбирает количество записей для печати. Каждый идентификатор записи должен быть отправлен на страницу обработки, на которой будет отображена версия для печати. Я не хочу перенаправлять пользователя из веб-приложения для печати, и я не могу использовать всплывающее окно get in, поскольку число идентификаторов записей может стать слишком большим, чтобы поместиться в URL.

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

Возможно ли это вообще, и если да, то как?

Заранее спасибо:)

Ответы [ 6 ]

3 голосов
/ 12 февраля 2010

Это то, для чего используется атрибут target. Установите его на «_blank», чтобы открыть новое окно. Если вы хотите, чтобы ваша разметка была действительной (какой смысл? Уверяю вас, что ваши пользователи могут меньше заботиться о достоверности вашей разметки!), Затем используйте Javascript, чтобы установить цель при загрузке страницы ...

window.onload = function() {
  document.forms[0].target = '_blank';
}

Другого пути нет.

1 голос
/ 12 февраля 2010

В Javascript перехватите отправку формы, заполните вторую форму только скрытыми полями с требуемыми значениями и отправьте эту форму вместо этого.

0 голосов
/ 12 февраля 2010

Если вы установили какое-то скрытое поле на странице, которая открывает новое окно (назовите его entryIds), прежде чем открывать новое окно с вызывающей страницы, вы можете ссылаться на него на открытой странице следующим образом:

$(function() {
    var $opener = $(window.opener.document);
    var entryIds = $opener.find("#entryIds").val();
    // do something with the ids
});  

Недостатком здесь является то, что теперь вам остается отображать детали ввода через javascript. Нет необходимости делать форму сообщения вообще.

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

0 голосов
/ 12 февраля 2010

Вы можете использовать Javascript window.open, чтобы «открыть» новое окно и использовать параметры GET в URL для передачи аргументов ... Но IMO это хуже, чем использование атрибута target в переходном типе документа.

Лучший способ сделать это - «фальшивое» новое окно, которое создается на лету в DOM и заполняется вызовами AJAX. Таким образом, вы не «нарушаете» пользовательский интерфейс (открывая новое окно).

0 голосов
/ 12 февраля 2010

Атрибут target элемента <form> действителен в XHTML 1.0 transitional ..

Если вы используете XHTML 1.1 или 1.0 Strict, то <iframe> не является допустимым тегом.

0 голосов
/ 12 февраля 2010

Для нацеливания на верхнюю часть текущей страницы и выделения из любого используемого в настоящее время набора фреймов вы должны использовать <a href="page.htm" target="_top"> в HTML. В Javascript вы используете:

top.location.href = 'page.htm';

Для нацеливания на текущую страницу или фрейм вы можете использовать <a href="page.htm" target="_self"> в HTML. В Javascript вы используете:

self.location.href = 'page.htm';

Для нацеливания на родительский фрейм вы можете использовать <a href="page.htm" target="_parent"> в HTML. В Javascript вы используете:

parent.location.href = 'page.htm';

Чтобы указать целевой кадр в наборе кадров, вы можете использовать <a href="page.htm" target="thatframe"> в HTML. В Javascript вы используете:

top.frames['thatframe'].location.href = 'page.htm';

Чтобы указать конкретный iframe на текущей странице, вы можете использовать <a href="page.htm" target="thatframe"> в HTML. В Javascript вы используете:

self.frames['thatframe'].location.href = 'page.htm'; 
...