Frage

Was? Ich möchte in der Lage sein, eine Post-Anforderung zu tun (muss nicht Formulardaten werden) in ein neues Fenster, ohne das Zielattribut mit (XHTML-Validierung).

Warum? Ich habe eine webapp (mit jQuery), wo der Benutzer eine Anzahl von Einträgen auswählt, zu drucken. Jeder Eintrag id sollte an einer Verarbeitungs Seite gesendet werden, die eine Druckversion der entires angezeigt wird. Ich will nicht von der Webapp den Benutzer weg lenken zu drucken, und ich kann in einem Popup-Fenster verwenden, nicht, weil die Zahl der Beitrags-IDs werden könnte, zu groß in einer URL zu passen.

Ich habe gegoogelt und gelesen mehrere Foren und die meisten Menschen scheinen entweder das Zielattribut direkt oder Einsetzen mit Hilfe von JavaScript zu suggerieren. Ich hatte gehofft, diese beiden Lösungen zu vermeiden.

Ist dies überhaupt möglich und wenn ja, wie?

Vielen Dank im Voraus:)

War es hilfreich?

Lösung

In Javascript, Intercept das Formular Vorlage, füllen Sie eine zweite Form mit nur versteckten Feldern mit den Werten, die Sie mögen, und senden Sie diese Form statt.

Andere Tipps

Dies ist, was das target Attribut für ist. Setzen Sie sich auf „_blank“, um ein neues Fenster zu öffnen. Wenn Sie Ihr Markup wollen gültig sein (was ist der Punkt? Ich versichere Ihnen, dass Ihre Benutzer wurscht über die Gültigkeit Ihrer Markup!), Dann verwenden Javascript das Ziel beim Laden der Seite ...

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

Es gibt keinen anderen Weg.

Um die oben auf der aktuellen Seite Ziel und bricht aus jedem Frame-Set zur Zeit in Gebrauch würden Sie <a href="page.htm" target="_top"> in HTML verwenden. In Javascript Sie verwenden:

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

Um die aktuelle Seite zielen oder umrahmen Sie <a href="page.htm" target="_self"> in HTML verwenden können. In Javascript Sie verwenden:

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

den übergeordneten Rahmen an, die du <a href="page.htm" target="_parent"> in HTML verwenden können. In Javascript Sie verwenden:

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

Um einen bestimmten Rahmen in einem Frame-Set Ziel Sie <a href="page.htm" target="thatframe"> in HTML verwenden können. In Javascript Sie verwenden:

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

Um einen bestimmten iframe innerhalb der aktuellen Seite zielen Sie <a href="page.htm" target="thatframe"> in HTML verwenden können. In Javascript Sie verwenden:

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

Das Attribut target des <form> Elements ist gültig in XHTML 1.0 Übergang ..

Wenn Sie mit XHTML 1.1 oder 1.0 Strict dann der <iframe> ist kein gültiger Tag in erster Linie ..

Sie können Javascript verwenden window.open zu „Pop“ die neuen Fenster und die Verwendung GET-Parameter in der URL-Argumente zu übergeben ... Aber IMO ist es schlimmer als in Übergangs-Doctype des Zielattribut verwendet wird.

Der beste Weg, es ist ein „fake“ neuen Fenster zu tun, die auf der Fliege in der DOM und füllt sich durch AJAX Anrufe erstellt wird. So kann man nicht „break“ die User Experience (durch Öffnen eines neuen Fensters).

Wenn Sie etwas versteckt Feld auf der Seite gesetzt, die das neue Fenster öffnet (nennen wir es EntryIDs), bevor Sie ein neues Fenster von der anrufenden Seite zu öffnen, können Sie es in der geöffneten Seite wie so Referenz:

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

Der Nachteil hierbei ist, dass Sie jetzt auch bleiben Sie Ihre Eingabe Details über Javascript angezeigt werden soll. Keine Notwendigkeit, eine Form Post überhaupt zu tun.

Wenn Sie das Gefühl Frisky Sie immer den Eingabe-IDs in einer Sitzung oder Cookie gesetzt könnten (über einen Web-Service-Aufruf) auf der Opener Seite, bevor Sie das neue Fenster öffnen, und ergreifen Sie die Sitzung auf der geöffneten Seite, so dass Sie aufzubauen, anstatt die Druckseite auf der Server-Seite.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top