2016-07-22 15 views
1

Ich arbeite an einer Phoenix Web App und versuche herauszufinden, wie man ein globales Suchfeld in der Navigationsleiste implementiert, die auf eine Suche zeigt auf einer Tabelle unter /users, die mit DataTables erstellt wird. Wie ich es jetzt habe, wenn ich eine Suche über die Suchleiste einreiche, wird es auf /users umgeleitet, aber wendet die Suche nicht auf die Tabelle an.Phoenix - Site-weite Suchfunktion mit DataTables

app.html.eex (Layout):

<form id="custom-search-input" class="nav navbar-nav pull-right" action="/users"> 
    <div class="input-group"> 
    <input id="ee-search" type="text" name="search" class="form-control" placeholder="Employee Search" /> 
    <span class="input-group-btn"> 
     <button class="btn btn-info"> 
     <i class="fa fa-search"></i> 
     </button> 
    </span> 
    </div> 
</form> 

app.js:

$(document).ready(function() { 
    $('#employeeTable').DataTable(); 
}); 

var table = $('#employeeTable').DataTable({ 
    "lengthMenu": [ [15, 50, 75, 150, -1], [15, 50, 75, 150, "All"] ] 
}); 

Ich fand das in der Datentabellen, die API I in app.js gesetzt haben:

$('#ee-search').on('keyup', function() { 
    table.search(this.value).draw(); 
}); 

Ich entschuldige mich im Voraus ... meine Javascript-Fähigkeiten sind praktisch nicht existent. Wie bekomme ich die Sucheingabe für die DataTable? Ich nehme an, es gibt eine Möglichkeit, die Formularvorlage/JavaScript-Code/DataTable zu verknüpfen? Wenn Sie weitere Informationen oder Code benötigen, lassen Sie es mich bitte wissen. Vielen Dank!

+0

Sie sollten in der Lage sein, Ihre 'table' -Variable auf die Art und Weise zu referenzieren, wie Sie es versuchen, wenn Sie es definieren, wo Ihr' keyup'-Handler es sehen kann. Sie können einen Haltepunkt in Ihre Tabelle einfügen und die Tabelle auswerten, um festzustellen, ob sie nicht definiert ist. Das Erlernen von Javascript ist nach meiner Erfahrung zum Teil eine Frage der Syntax-Nachschau und zum Teil eine Frage des Herumlaufens in den DOM-Objekten, um zu sehen, was wirklich da ist. – BobRodes

+0

Vielleicht habe ich deine Frage letzten Post nicht klar verstanden. Befindet sich das Suchfeld, das der Benutzer auf einer anderen Seite eingibt, in der Tabelle, in der die gefilterten Ergebnisse angezeigt werden? – BobRodes

+0

@BobRodes Ja, das Suchfeld befindet sich auf einer statischen Navigationsleiste, auf die von überall zugegriffen werden kann. Die '/ user'-Seite ist im Grunde ein Mitarbeiterverzeichnis und ich versuche es von überall auf der Website zugänglich zu machen. – jsonkenl

Antwort

1

Es gibt drei Möglichkeiten, Daten von einer Seite an eine andere zu übergeben, ohne einen Umlauf zu einem Server durchzuführen: GET-Daten, Cookies und Sitzungsvariablen im lokalen Speicher. Von diesen würde ich mit GET-Daten beginnen.

Also, lesen Sie this question, die (wie ein Beispiel von vielen, und) erklärt, wie Sie Daten von einer Seite zu einer anderen mit dem GET-Mechanismus übergeben. Im Grunde müssen Sie method="GET" zu den Attributen Ihres Formulars hinzufügen und dann den resultierenden Querystring von Ihrer \users-Seite analysieren.

, dann die Suche durchzuführen, rufen Sie einfach die search() Methode, Ihre analysierte Zeichenfolge als Argument übergeben, und rufen Sie die draw() Methode, so:

myTable.search(myTextString).draw(); 

Die Datentabelle wird den Suchbegriff gelten, filtern die Ergebnisse, und zeichnen Sie die Tabelle neu.

+0

Danke für die Hilfe! Ich habe es jetzt an den Punkt gebracht, an dem es die GET-Parameter analysiert und es als Wert des Suchfelds auf der Seite '/ users 'eingibt, jedoch wird die Suche nicht gesendet. Gibt es zusätzlichen Code, den ich der jQuery hinzufügen muss, die die Suche tatsächlich einreicht? Ich habe versucht, .submit() hinzuzufügen, aber das schien nicht zu funktionieren. – jsonkenl

+0

Sie müssen die Methode 'filter()' verwenden, um die Suchkriterien anzuwenden. Entschuldigung, das habe ich verpasst, dachte naiv, dass nur das Einstecken des Textes den Filter anwenden würde. Hat meinen Beitrag bearbeitet. – BobRodes

+0

Ich sehe, wohin du mit 'filter()' gehst, aber die 'search()' Methode lieferte die Ergebnisse, nach denen ich gesucht habe. Ich habe deine Antwort aktualisiert, um dies zu berücksichtigen. Danke nochmal für die Hilfe! – jsonkenl