Lösen Sie ein Ereignis auf "Klicken" und "Eingeben" aus


73

Ich habe ein Suchfeld auf meiner Website, das. Derzeit müssen Benutzer auf die Schaltfläche "Senden" neben dem Feld klicken, um über den Beitrag von jquery zu suchen. Ich möchte, dass Benutzer auch die Eingabetaste drücken, um zu suchen. Wie kann ich das machen?

JQUERY:

$('document').ready(function(){
    $('#searchButton').click(function(){
        var search = $('#usersSearch').val();
        $.post('../searchusers.php',{search: search},function(response){
            $('#userSearchResultsTable').html(response);
        });
    });
});

HTML:

<input type='text' id='usersSearch'  /><input type='button' id='searchButton' value='search' />


Ja, Suchfunktion ist nützlich ...
elclanrs

Antworten:


110

Verwenden Sie das keypressEreignis im usersSearchTextfeld und suchen Sie nach der EnterSchaltfläche. Wenn die Eingabetaste gedrückt wird, wird das Klickereignis der Suchtaste ausgelöst, das den Rest der Arbeit erledigt. Versuche dies.

$('document').ready(function(){
    $('#searchButton').click(function(){
        var search = $('#usersSearch').val();
        $.post('../searchusers.php',{search: search},function(response){
            $('#userSearchResultsTable').html(response);
        });
    })
    $('#usersSearch').keypress(function(e){
        if(e.which == 13){//Enter key pressed
            $('#searchButton').click();//Trigger search button click event
        }
    });

});

Demo


1
Besser noch: Verwenden Sie stattdessen das Keyup-Ereignis, um sicherzustellen, dass Ihre Funktion nur einmal ausgelöst wird. Vielen Dank an @StevePaulo für seinen Kommentar in dieser Antwort .
Schritte

2
Ein Nachteil der Verwendung von Keyup, den ich gerade entdeckt habe: Sie können die Standardaktion nicht verhindern, da das Keyup-Ereignis erst ausgelöst wird, nachdem die Standardaktion für den Schlüssel ausgeführt wurde (siehe hier ).
Schritte

62

Sie rufen beide Ereignis-Listener auf und verwenden .on()dann eine ifFunktion innerhalb der Funktion:

$(function(){
  $('#searchButton').on('keypress click', function(e){
    var search = $('#usersSearch').val();
    if (e.which === 13 || e.type === 'click') {
      $.post('../searchusers.php', {search: search}, function (response) {
        $('#userSearchResultsTable').html(response);
      });
    }
  });
});

10
Warum bekommt diese Antwort nicht mehr Stimmen? Ich meine, dies sind weniger Codeblöcke (wie das Hinzufügen eines weiteren Ereignisses, um einen Klick auszulösen). Irgendwelche Nachteile davon?
Nin-ya

Wirklich gesagt, Nin-ya & Sagarthapa.
Himanshu Aggarwal

2
Sie müssen den Tastendruck aus dem Suchfeld und den Klick über die Suchschaltfläche erfassen. Dies sind zwei separate DOM-Entitäten, sodass dieser Code nicht funktioniert.
Moolie

Es hat bei mir funktioniert, aber ich musste e.preventDefault () als erste Zeile hinzufügen, um eine doppelte Ausführung zu verhindern
Novasol

TIL: Ich kann auf mehrere Events mit hören on(). Hatte keine Ahnung, dass du das machen könntest!
Scott Fraley

5

So etwas wird funktionieren

$('#usersSearch').keypress(function(ev){
    if (ev.which === 13)
        $('#searchButton').click();
});

aber wie kann ich beides verwenden, suchen oder drücken?
Kirby

1
Sie fügen den Code, den ich hinzugefügt habe, zusätzlich zu dem Code ein, den Sie bereits haben. Dann werden beide funktionieren.
Jopke

2
$('#form').keydown(function(e){
    if (e.keyCode === 13) { // If Enter key pressed
        $(this).trigger('submit');
    }
});

1
$('#usersSearch').keyup(function() { // handle keyup event on search input field

    var key = e.which || e.keyCode;  // store browser agnostic keycode

    if(key == 13) 
        $(this).closest('form').submit(); // submit parent form
}

1

Sie können das folgende Tastendruckereignis beim Laden des Dokuments verwenden.

 $(document).keypress(function(e) {
            if(e.which == 13) {
               yourfunction();
            }
        });

Vielen Dank


0

Schauen Sie sich die keypress Funktion an .

Ich glaube, der enterSchlüssel ist, 13dass Sie etwas wollen wie:

$('#searchButton').keypress(function(e){
    if(e.which == 13){  //Enter is key 13
        //Do something
    }
});
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.