Gibt es bitte eine Option, um die Suche erst zu starten, nachdem 3 Zeichen eingegeben wurden?
Ich habe ein PHP-Skript für Kollegen geschrieben, das 20.000 Einträge anzeigt, und sie beschweren sich, dass beim Eingeben eines Wortes die ersten Buchstaben dazu führen, dass alles einfriert.
Eine Alternative wäre, die Suche durch Klicken auf eine Schaltfläche und nicht durch Eingabe von Zeichen zu starten.
Unten ist mein aktueller Code:
$("#my_table").dataTable( {
"bJQueryUI": true,
"sPaginationType": "full_numbers",
"bAutoWidth": false,
"aoColumns": [
/* qdatetime */ { "bSearchable": false },
/* id */ null,
/* name */ null,
/* category */ null,
/* appsversion */ null,
/* osversion */ null,
/* details */ { "bVisible": false },
/* devinfo */ { "bVisible": false, "bSortable": false }
],
"oLanguage": {
"sProcessing": "Wait please...",
"sZeroRecords": "No ids found.",
"sInfo": "Ids from _START_ to _END_ of _TOTAL_ total",
"sInfoEmpty": "Ids from 0 to 0 of 0 total",
"sInfoFiltered": "(filtered from _MAX_ total)",
"sInfoPostFix": "",
"sSearch": "Search:",
"sUrl": "",
"oPaginate": {
"sFirst": "<<",
"sLast": ">>",
"sNext": ">",
"sPrevious": "<"
},
"sLengthMenu": 'Display <select>' +
'<option value="10">10</option>' +
'<option value="20">20</option>' +
'<option value="50">50</option>' +
'<option value="100">100</option>' +
'<option value="-1">all</option>' +
'</select> ids'
}
} );
jquery
datatables
Alexander Farber
quelle
quelle
init.dt
Fall, z$('#yourTable').on('init.dt', function () { ... });
.Hinweis: Dies war für eine viel frühere Version von Datentabellen. Weitere Informationen finden Sie in dieser Antwort für jQuery-Datentabellen v1.10 und höher.
Dadurch wird das Verhalten des Eingabefelds so geändert, dass nur gefiltert wird, wenn entweder die Eingabetaste gedrückt wurde oder mindestens 3 Zeichen in der Suche enthalten sind:
Sie können es hier sehen: http://jsbin.com/umuvu4/2 . Ich weiß nicht, warum die dataTables-Leute sowohl an den Tastendruck als auch an den Tastendruck gebunden sind, aber ich überschreibe beide, um kompatibel zu bleiben, obwohl ich denke, dass der Tastendruck ausreichend ist.
Hoffe das hilft!
quelle
e.keycode != 13
mite.keyCode > 13
, die auch Feuer , wenn sie Registerkarte aus dem Feld..unbind('keypress keyup') .bind('keypress', function(e) ...
Warum probieren Sie nicht diese erweiterte Version von Stony's Antwort :)
Dies verzögert die Suche, bis der Benutzer die Eingabe beendet hat.
Ich hoffe es hilft.
quelle
setTimeout(function(){...}, 600)
, da die Funktion bei weiteren Zeichen nicht erneut ausgelöst zu werden scheint.setInterval
, da es alle 200/600 ms erneut ausgelöst wird und prüft, ob searchWait nicht auf 0 zurückgesetzt wurde. Wenn Sie beispielsweise weiterhin etwas in die Eingabe eingeben, wird searchWait immer auf 0 zurückgesetzt = Suche wird nie ausgeführt. Ich finde jedoch die Verwendung von searchWait als Ganzzahl, die bis 3 zählt, ziemlich dunkel. Besser wäre nur eine True / False-Flagge, wenn Benutzereingaben passieren und einesetInterval
von 600.Hier erfahren Sie, wie Sie mit der API-Änderung in Version 1.10 umgehen können
quelle
Hier ist ein Plugin-ähnliches Skript, das Datentabellen erweitert.
Verwendung:
quelle
if ( anControl.val().length > 2 || e.keyCode == 13)
Meine Version der Datentabellen 1.10.10
Ich habe ein paar Dinge geändert und es funktioniert jetzt. Ich teile also, weil es schwierig war, es für Version 1.10.10 zum Laufen zu bringen. Vielen Dank an cale_b, Stony und Sam Barnes. Schauen Sie sich den Code an, um zu sehen, was ich getan habe.
quelle
Um den Serveraufruf aufzurufen, nachdem der Benutzer die Mindestzeichen in das Suchfeld eingegeben hat, können Sie Allans Vorschlag folgen :
Ändern Sie für mindestens 3 Zeichen einfach Zeile 19 im Plug-In in:
quelle
Dies funktioniert in DataTables 1.10.4:
JSFiddle
quelle
Für die Version 1.10 fügen Sie diesen Code in den Optionen zu Ihrem Javascript hinzu. Die initComplete überschreibt die Suchmethode und wartet, bis 3 Zeichen geschrieben sind. Vielen Dank an http://webteamalpha.com/triggering-datatables-to-search-only-on-enter-key-press/ für das Licht.
quelle
Benutze das
quelle
Obwohl es die ursprüngliche Frage nicht beantwortet, hatte ich eine komplexe und langsame Suche in meinen Datentabellen. Das Filterereignis wurde nach jedem Tastendruck ausgelöst, was eine merkliche Verzögerung nach 10 Zeichen bedeutete. Durch die Einführung einer kurzen Verzögerung nach einem Tastendruck vor dem Auslösen des Filterereignisses, bei der ein nachfolgender Tastendruck den Zähler zurücksetzte und die vorherige Suche verhinderte, konnte ich die Suche viel schneller erscheinen lassen. andere mögen dies hilfreich finden.
Ich habe die Antworten von Stony und Christian Noel verwendet, um dies zu machen:
quelle
Sie können den Ajax-Aufruf an den Server dadurch verzögern
Dieser Code stoppt den Ajax-Aufruf, wenn die Zeit zwischen dem Drücken der Taste weniger als 300 ms beträgt. Wenn Sie also ein Wort schreiben, wird nur ein Ajax-Aufruf ausgeführt und nur, wenn Sie aufhören zu tippen. Sie können mit dem Verzögerungsparameter (300) "spielen", um mehr oder weniger Verzögerung zu erhalten
quelle
Sie müssen wahrscheinlich das Plugin ändern.
Und anstatt es zu X-Zeichen zu machen, verwenden Sie eine Verzögerung, damit die Suche beginnt, sobald sie etwa 1 Sekunde lang nicht mehr tippen.
Die Keydown / Keyup-Bindung, die derzeit die Suche auslöst, würde also mit einem Timer geändert ...
quelle
Feste Version für Datentabellen 1.10.12 mit API und korrekter Entbindung der 'Eingabe'. Außerdem wurde die Suche auf der Rücktaste unter der Zeichenbeschränkung gelöscht.
quelle
Wenn Sie die alte Version verwenden, sieht es so aus. Richards Lösung funktioniert gut. Aber wenn ich es benutze, habe ich nur neue Ereignisse hinzugefügt und nicht gelöscht. Denn wenn Code ausgeführt wird, ist die Tabelle noch nicht erstellt. Also fand ich heraus, dass es die fnInitComplete-Methode gibt (Feuer beim Erstellen einer Tabelle) und habe sie auf Ricards Lösung angewendet. Hier ist es
quelle
Sie können diesen Code für Medtronic-Datentabellen oder anderen Code verwenden, um nach Verwendung von 3 Zeichen zu suchen:
searchInput.length () == 0 für die erste Show.
quelle
Können Sie eine eigene Funktion schreiben, um die Länge der eingegebenen Zeichenfolge zu testen, die an einen onKeyUp-Ereignishandler angehängt ist, und die Suchfunktion auslösen, sobald die Mindestlänge erreicht ist?
Etwas in der Art von:
... das heißt, auf eine Art Pseudocode, aber Sie bekommen den Jist.
quelle
Sie können den Parameter nach Name minlength verwenden, um die Suche auf 3 Zeichen zu beschränken:
quelle
Die Länge der Daten, die übergeben werden, können Sie mit data.currentTarget.value.length ermitteln (siehe unten).
und natürlich möchten Sie, dass dieser Code beim Entfernen von Text ausgeführt wird. Setzen Sie den Wert daher auf 0
quelle
Dies funktioniert mit DataTables Version 1.10.19. Es ist nur erforderlich, die js in Ihre Website-Vorlage aufzunehmen - nützlich für eine Site, auf der mehrere dataTables auf verschiedenen Seiten konfiguriert sind. Auch nützlich für langsame xhr-Ladetabellen, lässt keine neuen xhr-Anforderungen zu, bis alle aktuell ausgeführten beendet sind. Die verwendete Suchfunktion ist der ursprünglichen Einrichtung der Suchfunktion durch das Plugin sehr ähnlich .
quelle
Gibt es einen Grund, warum Sie die Länge nicht einfach auf "Ändern" überprüfen würden?
quelle
Sie müssen die Datei jquery.datatables.js ändern
----- Natürlich aktualisiert Sie können die Länge> 3 überprüfen, aber ich denke, Sie brauchen noch einen Timer. Wenn Sie viele Daten haben, möchten Sie diese nicht nach jeder Charakteraktualisierung weiter filtern lassen.
Innerhalb dieser Methode:
Fügen Sie dem Keyup einen Timer hinzu, wie in einer der Antworten gezeigt.
Dann gehen Sie zu dieser Seite http://jscompress.com/
Und nach Ihrem geänderten Code werden die js minimiert.
quelle