2012-03-28 15 views
1

ich ein Suchfeld an der Spitze meiner django Vorlage habe (ohne umgebende Form Tags):Selective django/Jquery Form Vorlage

<input name="q" id="id_q" /> 
<input type="submit" id="id_s" value="Search"> 

Ab sofort wird der Suchschlüssel mit einem Tastendruck vorgelegt oder durch klicken eingeben:

$(function($) { 
    $(":submit").click(function() { 
     window.location = "{% url search %}?q=" + $("#id_q").val(); 
    }); 
}); 

Nun, ich Zugabe in django-registration. Als Ergebnis habe ich eine Login-Vorlage, die der folgenden ähnelt:

<form method="post" action=".">{% csrf_token %} 
    {% if form.non_field_errors %} 
     <div class="form_errors"> 
      {% for err in form.non_field_errors %} 
       <div class="form_error_message">{{ err }}</div> 
      {% endfor %} 
     </div> 
    {% endif %} 
    {% for hidden in form.hidden_fields %} 
     {{ hidden }} 
    {% endfor %} 
    {% for field in form.visible_fields %} 
     <div class="block"> 
      {{ field.label_tag }} 
      {{ field }} 
      {% for err in field.errors %} 
       <span class="error_message">{{ err }}</span> 
      {% endfor %} 
     </div> 
    {% endfor %} 

    <div style="padding-left:11em; padding-bottom:1em;"> 
     <input type="submit" value="{% trans 'Log in' %}" /> 
     <input type="hidden" name="next" value="{{ next }}" /> 
    </div> 
</form> 

Ich brauchte eine Weile, um herauszufinden, warum auf einer Suchseite schickte mich einzuloggen versucht. Ich erkannte, dass nach dem Eingeben des Passworts durch Drücken der Eingabetaste der Suchschlüssel aktiviert wurde, nicht der Benutzername/das Passwort.

Wie kann ich die Vorlage so konfigurieren, dass ich eine Suchanfrage eingeben, die Eingabetaste drücken und die Suchansicht aktivieren ODER meine Kontoinformationen eingeben, die Eingabetaste drücken und mich anmelden kann? Grundsätzlich, wie kann ich angeben, dass eine Enter-Taste drücken "gehört" zu seiner erforderlichen Funktion?

Antwort

0

Sie brauchen das nicht:

<form method="post" action="{% url search %}"> 
    <input name="q" id="id_q" /> 
    <input type="submit" id="id_s" value="Search"> 
</form> 
<script type="text/javascript"> 
$(function($) { 
    $(":submit").click(function() { 
     window.location = "{% url search %}?q=" + $("#id_q").val(); 
    }); 
}); 
</script> 

, dass die Art und Weise, es zu tun:

<form method="get" action="{% url search %}"> 
    <input name="q" id="id_q" value="{{ request.GET.q }}" /> 
    <input type="submit" id="id_s" value="Search"> 
</form> 

Beachten Sie, dass die Javascript weg ist, und dass die Form verlässt sich jetzt auf mit dem „bekommen " Methode. Also, das Javascript wird nicht mehr in Konflikt geraten.

Auch hinzugefügt I einen Wert an den Q-Eingang, als freien goodie B)

Jeff Sickel:

Gelöschte Code Code debuggt wird.

Wenn Sie wirklich wollte, dass die js beheben, könnte man als solche tun:

$("form[action={% url search %}]").submit(// ... 

Oder eine ID zu Ihrer Suche Formular hinzuzufügen:

$("#search_form").submit(// ... 
+0

Dies ist hilfreich, aber isn noch‘ Ich komme ziemlich schnell zu dem, was ich brauche. Ja, das Suchfeld wird gesendet, wenn die Eingabetaste gedrückt wird, aber das Drücken der Eingabetaste nach dem Ausfüllen der Anmeldungsformularinformationen löst die Suchfunktion aus. Gibt es eine Möglichkeit, die Anmeldung nach der Eingabe des Passworts auszulösen, während die Eingabetaste weiterhin funktioniert, wenn der Benutzer stattdessen das Suchfeld verwendet? –

+0

Wie ist es hilfreich? – jpic

+0

vielleicht missverstehe ich, was ich tun muss. Ich mache zwei Dinge. Zuerst entferne ich den JavaScript-Code. Zweitens ändere ich den Suchfeldcode, indem ich

um ihn mit der Methode "get" hinzufüge. Dies repliziert den Code, den Sie oben haben. Dies war hilfreich, da die Verwendung des Suchfelds (das Sie oben ausgeschrieben haben) beim Drücken der Eingabetaste erfolgt. Aber wenn ich versuche, mich anzumelden (mit dem Formular, das ich am Ende meiner Frage geschrieben habe), reicht es nicht, wenn die Eingabetaste gedrückt wird. Ich habe versucht, den Post dieses Formulars zu ändern, aber dann würde es überhaupt nicht funktionieren. –