2009-04-20 3 views
2

Angenommen natürlich arbeiten wir mit HTML Forms und GET/POST Daten, Backend Sprache Agnostic. Asker spricht fließend PHP und Python.Behandeln Sie eine (möglicherweise paginierte) Liste von Elementen, z. B. um einen Wert basierend auf einem einzelnen Klick umzuschalten?

Beispiel: Tracking-Ereignis Anwesenheit, gibt es eine HTML-Seite für die Ereignisverwaltung, die alle verfügbaren Personen auflistet. Es gibt eine Spalte neben jedem Namen mit einer Grafik/Widget, die ihre Anwesenheit für das Ereignis darstellt. Was ist der beste Weg, um den Anwesenheitsstatus für eine Person auf der Liste zu aktualisieren?

Eine Methode, an die ich anfangs dachte, war einfach eine Checkbox für die Teilnahme zu verwenden. Ungeprüfte Felder werden jedoch nicht zusammen mit Formulardaten gesendet . Die zugrunde liegende Logik müsste den Anwesenheitsstatus auf FALSE/OFF/Not Attending für jede Personen-ID ändern, die nicht zusammen mit dem Formular gesendet wird. Dies bricht, wenn die Liste paginiert wird!

Die zweite Methode, über die ich nachdachte, war die Verwendung einer Grafik/Schaltfläche neben jedem Namen. Ist es angemessen, dass jeder Knopf ein Senden-Knopf ist? Wie in: Ist es erlaubt, dass ein Formularelement mehrere Übergabeschaltflächen hat? Oder sollte jeder Button/Person in ein eigenes Formularelement eingebunden werden?

Antwort

1

Eine ziemlich einfache Lösung ist es, mit Ihrer Checkbox-Methode zu gehen, aber ein paar versteckte Formularelemente hinzuzufügen, die Werte für die minimalen/maximalen Werte speichern, die gesendet werden. Auf diese Weise kann Ihre Logik "fehlende" Checkboxen als "aus" behandeln, ohne alle zu brechen, die nicht auf der Seite sind.

Ich empfehle nicht mehrere Submit-Elemente in einem einzigen Formular. Wenn Sie in eine andere Richtung gehen möchten, könnten Sie in jeder Zeile, die mit Ajax die Anwesenheit für die Person dieser Zeile ändert, einen Link (Text/Grafik/Schaltfläche) sehen. Auf diese Weise muss nichts jemals explizit vom Benutzer "gesendet" werden. Während sie auf der Benutzeroberfläche wechseln, werden Aktualisierungen im Hintergrund ausgeführt.

+0

Eine gute Antwort, und ich möchte erweitern, was hier ist: Das funktioniert basierend auf einem numerischen Schlüssel, und wo die Person Datensätze sind zusammenhängend. Ansonsten (gefiltert/nach Vornamen sortiert) müsste diese Methode eine Liste aller Personen-IDs auf der Seite enthalten. Es wirkt etwas klobig, könnte aber funktionieren. –

+0

Nun, die Min/Max-Werte könnten sein, was auch immer die Seite zum Sortieren verwendete. Das Übergeben von Namen als Minimum/Maximum würde genauso gut funktionieren, solange die Formularverarbeitungsseite diese verwendet, um die Liste gültiger IDs aus den Daten abzurufen. Es muss nicht unbedingt zusammenhängend sein, das Minimum/Maximum sollte nur verwendet werden, um Grenzen bei der Auswahl einer Liste gültiger IDs zu setzen, die dann mit der Liste der Checkbox-Werte verglichen werden können. –

+0

Eine zusätzliche Anmerkung zu meinem obigen Kommentar, es würde einen dritten versteckten Wert erfordern, der die Sortiermethode darstellt, also könnten Sie zum Beispiel die 3 Werte übergeben: sort = "lastName", min = "Adams", max = "Carson" und wählen Sie auf der Formularverarbeitungsseite alle Personen-IDs aus der Datenbank aus, deren Nachname zwischen Adams und Carson liegt. –

0

Wie bei jeder anderen Schaltfläche "Datensatz bearbeiten" oder "Diese Zeile löschen" können die Umschaltflächen eine Übergabetaste/ein Grafikelement mit der eindeutigen Datensatz-ID (oder wie auch immer) zum Aktualisieren/Umschalten/Löschen in sein das value Attribut.

Der Formularhandler müsste nur die value der Schaltfläche senden (die ein eindeutiges name Attribut benötigen).

Bitte korrigieren Sie mich, wenn ich falsch liege, aber ich glaube, das ist in Ordnung und gültig in mindestens HTML4 und XHTML1.

+0

Ich glaube, es ist gültig und sollte funktionieren, aber es wird wahrscheinlich etwas nervig für den Benutzer sein, mit einem vollständigen Neuladen jedes Mal, wenn sie eine Zeile umschalten. –