2016-07-09 7 views
0

Ich verwende Datatables (https://datatables.net) auf meiner Site und möchte die Standardsuchfunktion mit einer levenstein-Methode überschreiben.Standardsuchfunktion für Datatabellen überschreiben

Ich habe bereits die levenstein-Methode an Ort und Stelle, aber ich habe Probleme mit dem Wert des Suchfelds, um es zu testen. Das Suchfeld, das Datatables hinzufügt, hat keine ID oder einen Namen oder irgendetwas anderes, das ich leicht verwenden kann, um auf dieses Element zu zielen.

kann ich 2 Möglichkeiten denken, diese zu lösen:

  1. Abbildung heraus, wie das Suchfeld Wert zu erhalten (den Benutzer typisierte Wert)
  2. Abbildung heraus, wie das Suchfeld zu verstecken, ohne Absperren Suche insgesamt und füge meine eigene benutzerdefinierte Eingabe hinzu.

Hier ist was ich habe.

$.fn.dataTable.ext.search.push(
    function(settings, data, dataIndex) { 
     var search = /* this should be the search box value */; 
     var title = data[1]; 

     return (title.toLowerCase().levenstein(search.toLowerCase()) < title.length) ? true : false; 
    } 
); 

Können Sie mir bitte mit einer der oben aufgeführten Optionen helfen.

Vielen Dank.

+0

können Sie nicht afaik; Das Suchfeld verwendet nur die Datentabellen-API. Nun, eigentlich könntest du vielleicht die Suchmethode überlisten, aber die dt-made GUI wird nur mit der API funktionieren, das ist die Hauptsache, die du beachten solltest. – dandavis

Antwort

1

keine ID oder den Namen oder irgendetwas anderes

Nun haben, hat es ja haben. Dies funktioniert für mich:

$('#myTable_filter input').on('keypress', function(e) { 
    e.preventDefault(); 
    alert(e.which); 
}); 

Gehen Sie einfach auf das Suchfeld und überprüfen Sie es (wenn Sie wissen nicht, wie das nur der rechten Maustaste auf ein beliebiges Element in Chrome, zu tun und inspizieren wählen), und Sie können sehen wie das für dich funktioniert. DataTables wendet eine ID (Ihr Tabellenname mit _filter angeheftet) an das div-Wrapping des Eingabefeldes an und es ist das einzige Eingabefeld im div. Also dieser Selektor funktioniert. Sie möchten auch eine preventDefault erstellen, damit die DataTables-Suche nicht nach dem Tastendruck ausgeführt wird.

+0

Danke, ich werde es versuchen, wenn ich nach Hause komme. Ich konnte das Suchfeld ausblenden, indem ich #table_filter ausblendete. Jetzt wird meine Suche nur noch richtig ausgeführt. Es sieht so aus, als ob meine Suche NACH der Standard-Suche läuft, also nicht sicher ist, wie sie ihre Ausführung stoppen kann. Ich werde versuchen, die preventDefault(), wenn ich nach Hause komme, aber nicht sicher, ob es funktionieren wird, weil meins scheint nach ihnen. –

+0

Sie könnten Recht haben. Wenn Sie defaultDefault verhindern, wird die Taste nicht gedrückt. Wenn Sie das Suchfeld nach dem Anwenden einer eigenen Suchroutine programmatisch füllen, wird das Keypress-Ereignis möglicherweise erneut ausgelöst ... – BobRodes

+0

Schauen Sie sich auch [das DataTables-Suchereignis] an (https://datatables.net/reference/event)/search), die vor dem Neuzeichnen der Tabelle ausgelöst wird, nachdem Suchkriterien auf die zugrunde liegenden Daten angewendet wurden. In diesem Fall könnten Sie wahrscheinlich den Standard verhindern, den Schlüssel rückgängig machen, auf den die Suche angewendet wurde, Ihre eigene Suche anwenden und die Tabelle neu zeichnen. Sie können auch den Jitter verhindern, indem Sie das Zeichen zweimal in das Suchfeld setzen, indem Sie das Zeichen bei Tastendruck greifen und es verhindern. – BobRodes

Verwandte Themen