2011-01-15 7 views
1

Ich bin mir nicht sicher, ob ich etwas falsch mache, ob etwas kaputt ist über filter_horizontal, oder ob meine Erwartungen, wie es sich verhalten sollte, falsch sind. Alle Einsichten geschätzt!Djangos filter_horizontal - stop enter drückt das Senden des Formulars

In meinem Kopf, wenn Sie filter_horizontal verwenden, ein paar Zeichen in das Textfeld geben Sie Ihre Wahl so zu verengen, dass es ein einzelnes Element ist, und drücken Sie die Eingabetaste, es sollte:

  1. Fügen Sie den Artikel zu die ausgewählte Liste
  2. löschen Sie Ihren eingegebenen Text (damit Sie einen anderen hinzufügen können).

Was es tatsächlich tut, ist:

  1. Fügen Sie Ihre Artikel auf die ausgewählte Liste
  2. Halten Sie den Text in der Filterbox
  3. das Formular aus, ohne Ihre neue Auswahl
  4. Spar

Mache ich etwas falsch? Ist das das Verhalten, das jeder sieht? Gibt es eine Möglichkeit, dies zu umgehen?

Ich verwende Django 1.2.3, und ich habe dies in Chrome getestet 8.0.552.237, Firefox 3.6.13 und IE 8.

Antwort

1

ich das Verhalten auf Django 1.2.1 bestätigen können.

Problem:

Es sieht aus wie admin/js/SelectFilter2.js einen Schlüssel up-Handler registriert die Filterung zu tun. Dieser Handler gibt auch false zurück, wenn der Schlüssel der Enter-Schlüssel war, der versucht, das Senden des Formulars abzubrechen.

Von admin/js/SelectFilter2.js Linie 85 oder so:

// don't submit form if user pressed Enter 
    if ((event.which && event.which == 13) || (event.keyCode && event.keyCode == 13)) { 
     from.selectedIndex = 0; 
     SelectBox.move(field_id + '_from', field_id + '_to'); 
     from.selectedIndex = 0; 
     return false; 
    } 

Das schien mich gut, so fügte ich einen Event-Handler am Ende der init Methode des Formulars einreichen Ereignis zu fangen:

addEvent(document.forms[0], 'submit', function(event) { 
     console.log("Form submitted"); 
    } 

Danach tun, es ist klar, dass Brände vor die keyUp Veranstaltung einzureichen. Wenn Sie also die Eingabetaste drücken, wird das Formular gesendet und das keyUp-Ereignis wird nie an das Feld gesendet.

Umgehung:

ich in der Lage war, durch Verwerfen aller betreten keyUp ‚s auf dem Formular selbst, um das Verhalten zu arbeiten. Fügen Sie diese auf das Ende des init-Methode in SelectFilter2.js:

addEvent(document.forms[0], 'keyup', function(event) { 
     if (event.keyCode && event.keyCode == 13) { 
      return false; 
     } 
    }); 

Dies ist die schnelle und schmutzige Art und Weise das Problem zu beheben, aber die Form-Ereignis ausgelöst wird nach der Veranstaltung Feld, so scheint es zu funktionieren. Es verhindert jedoch auch, dass die Eingabetaste das Formular auch überallhin sendet.

Dies sollte wahrscheinlich als django bug abgelegt werden.

+0

Dies funktionierte nicht für mich, obwohl es scheint, wie es sollte. In welcher Version von Django hast du das getestet? –

+0

@DanielNaab: 1.2.1 – Seth

Verwandte Themen