2016-06-01 4 views
0

Ich möchte dieses Formular senden, sobald die Seite geladen wurde, und ich habe den folgenden Code verwendet, um es zu tun. Das Problem ist, dass die Seite neu geladen wird und in dieser Schleife bleibt.'Senden' onload tritt in eine Schleife ein

HTML

<body onload="document.getElementById('filters').submit();"> 
<form id="filters" method="post"> 
    <section> 
     <select id="Genre" name="genres" > 
     <option value="Select Genre">Select Genre</option> 
     <option value="All">All</option> 
     {% for row in genre %} 
      <option value="{{row.genre}}">{{row.genre}}</option> 
     {% endfor %} 
     </select> 
     <select id="Rating" name="ratings" > 
     <option value="Select Rating">Sort by Rating</option> 
     <option value="Best">Best</option> 
     <option value="Rating_IMDB">IMDB</option> 
     <option value="Rating_RT">Rotten Tomatoes</option> 
    </select> 
    </section> 
</form> 
</body> 
+1

Sie müssen eine Aktion in Ihrem Formular setzen –

+1

Sie werden nie ohne einige Änderungen, weil dieser einreichen diese Seite zugreifen können. Wir wissen nicht, was diese genauen Änderungen sein müssen, da der erwartete Ablaufprozess für all das nicht in Frage steht. – charlietfl

Antwort

3

aktuelle Stand der Frage

Derzeit ist die Frage wirklich nicht genügend Informationen für eine gute Antwort geben, denn wir haben keine Ahnung, entweder 1) Wenn die Form wird gesendet an 2) Was das Formular tun soll, wenn gesendet

Sobald diese hinzugefügt werden, dann kann diese Antwort weiter verbessert werden.

Antwort

Sie benötigen eine Aktion für das Formular hinzufügen, wenn Sie es etwas tun wollen. Außerdem kann ich nicht sehen, warum Sie ein Formular VOR EINEM BENUTZER EINSTELLEN MÖCHTEN.

Derzeit macht das Formular keinen Sinn. Es funktioniert effektiv als Redirect auf die Seite, auf der Sie bereits sind, weil standardmäßig action="#" (glaube ich).

AJAX

Um die equivelant der Einreichung eines Formulars ohne diese reload Schleife zu tun, möchten Sie AJAX verwenden. Dies stellt eine asynchrone Anfrage an den Server und lädt die Seite nicht wirklich in den Browser. Hier ist, wie:

function loadDoc() { 
    var xhttp = new XMLHttpRequest(); 
    xhttp.onreadystatechange = function() { 
    if (xhttp.readyState == 4 && xhttp.status == 200) { 
     document.getElementById("demo").innerHTML = xhttp.responseText; 
    } 
    }; 
    xhttp.open("POST", "Where_you_are_submitting_form_to", true); 
    xhttp.send(); 
} 

Quelle: w3 Schulen

+0

Es ist eine Website, die eine Sammlung von Filmen anzeigt. Es werden keine Filme angezeigt, wenn das Formular nicht gesendet wird, nur wenn das Formular gesendet wurde. Ich möchte, dass die Filme angezeigt werden, sobald die Seite basierend auf den Werten von select geladen wird. Ich fügte eine Aktion hinzu, aber immer noch das gleiche Ergebnis .. – 0248881

+0

Dann denke ich, dass Sie AJAX wollen. Ich füge das meiner Antwort hinzu. – thesecretmaster

+0

@ RQ14 Gibt es einen Code, den Sie nicht enthalten haben? Bitte fügen Sie alle relevanten Javascript-Dateien hinzu, da das Senden des Formulars derzeit nichts an der Website ändert und das Formular nur an die Seite sendet, auf der Sie bereits aktiv sind. Bitte teilen Sie uns zuerst mit, 1) wo das Formular eingereicht wird und 2) was die Seite mit den übermittelten Werten macht. – thesecretmaster

0

Sie müssen die "action" in Form bringen.

<body onload="document.getElementById('filters').submit();"> 
<form id="filters" method="post" action="path"> 
<section> 
    <select id="Genre" name="genres"> 
    <option value="Select Genre">Select Genre</option> 
    <option value="All">All</option> 
    {% for row in genre %} 
    <option value="{{row.genre}}">{{row.genre}}</option> 
    {% endfor %} 
    </select> 
    <select id="Rating" name="ratings"> 
    <option value="Select Rating">Sort by Rating</option> 
    <option value="Best">Best</option> 
    <option value="Rating_IMDB">IMDB</option> 
    <option value="Rating_RT">Rotten Tomatoes</option> 
    </select> 
</section> 
</form> 
</body> 

Fiddle