Comment déclencher le bouton HTML lorsque vous appuyez sur Entrée dans la zone de texte?


106

Donc, le code que j'ai jusqu'à présent est:

<fieldset id="LinkList">
    <input type="text" id="addLinks" name="addLinks" value="http://">
    <input type="button" id="linkadd" name="linkadd" value="add">
</fieldset>

Ce n'est pas dans un <form> et est exactement comme dans a <div>. Cependant, lorsque je tape quelque chose dans le textbox"addLinks" appelé, je veux que l'utilisateur puisse appuyer sur Entrée et déclencher le "linkadd" buttonqui exécutera alors une fonction JavaScript.
Comment puis-je faire ceci?
Merci

Éditer: J'ai trouvé ce code, mais il ne semble pas fonctionner.

$("#addLinks").keyup(function(event){
    if(event.keyCode == 13){
        $("#linkadd").click();
    }
});

3
lier keypresset vérifier e.charCode==13(bouton Entrée).
Brad Christie

Avez-vous ajouté une référence à la bibliothèque jquery avant d'utiliser le code ci-dessus?
Milind Anantwar

Oui, j'ai fait référence à la bibliothèque, je ne sais pas pourquoi elle ne fonctionnait pas, mais c'est bien maintenant. Merci
Ben

Oui, comme @BradChristie l'a mentionné keypressou keydownmentionné dans cette réponse, c'est la voie à suivre.
metakermit

Réponses:


117
$(document).ready(function(){
    $('#TextBoxId').keypress(function(e){
      if(e.keyCode==13)
      $('#linkadd').click();
    });
});

5
l'ajout de 'return false' après l'événement de clic est également utile, pour éviter une entrée par défaut, appuyez sur d'autres boutons de la page
deebs

La réponse de dmitry_romanov est meilleure car elle est purement HTML.
McKay

6
@McKay, non, ce n'est pas le cas. Les boutons peuvent être utilisés pour d'autres choses que les formulaires. En fait, la question du PO n'est explicitement pas sous une forme.
Dan

2
@deebs tout à fait raison, je ne sais pas trop ce que j'ai fait ce jour-là, mais je dois avoir un pet cérébral.
Tim à MastersAllen


77

Nous sommes …… 2020. Et je crois que cela est toujours vrai.


NE PAS UTILISER keypress

  1. keypressévénement est pas déclenché lorsque l'utilisateur appuie sur une touche qui ne produit pas de caractère , tels que Tab, Caps Lock, Delete, Backspace, Escape, gauche et droite Shift, les touches de fonction ( F1- F12).

    keypressévénement Mozilla Developer Network

    L' keypressévénement est déclenché lorsqu'une touche est enfoncée , et cette touche produit normalement une valeur de caractère . Utilisez inputplutôt.

  2. Il est obsolète.

    keypressEvent UI Events (version de travail du W3C publiée le 8 novembre 2018.)

    • REMARQUE | L' keypressévénement est traditionnellement associé à la détection d'une valeur de caractère plutôt qu'à une clé physique , et peut ne pas être disponible sur toutes les clés dans certaines configurations.
    • AVERTISSEMENT | Le keypresstype d'événement est défini dans cette spécification à des fins de référence et d'exhaustivité, mais cette spécification déconseille l'utilisation de ce type d'événement. Lorsqu'ils sont dans des contextes d'édition, les auteurs peuvent s'abonner à l' beforeinputévénement à la place.

NE PAS UTILISER KeyboardEvent.keyCode

  1. Il est obsolète.

    KeyboardEvent.keyCode Réseau de développeurs Mozilla

    Obsolète | Cette fonctionnalité n'est plus recommandée. Bien que certains navigateurs puissent toujours le prendre en charge, il peut avoir déjà été supprimé des normes Web pertinentes, être en cours de suppression ou être conservé uniquement à des fins de compatibilité. Évitez de l'utiliser et mettez à jour le code existant si possible; voir le tableau de compatibilité au bas de cette page pour guider votre décision. Sachez que cette fonctionnalité peut cesser de fonctionner à tout moment.


Que dois-je utiliser alors? (La bonne pratique)

// Make sure this code gets executed after the DOM is loaded.
document.querySelector("#addLinks").addEventListener("keyup", event => {
    if(event.key !== "Enter") return; // Use `.key` instead.
    document.querySelector("#linkadd").click(); // Things you want to do.
    event.preventDefault(); // No need to `return false;`.
});

que diriez-vous if (event.key == "Enter") { document.querySelector("#linkadd").click(); } :?
Anupam le

2
Notez que ce .keyn'est pas pris en charge dans tous les navigateurs: caniuse.com/#feat=keyboardevent-key - environ 10% des personnes utilisent des navigateurs qui ne le prennent pas en charge.
Martin Tournoij

72

Il existe une solution sans js.

Sélectionnez type=submitle bouton que vous souhaitez utiliser par défaut et type=buttonles autres boutons. Maintenant, dans le formulaire ci-dessous, vous pouvez appuyer sur Entrée dans tous les champs de saisie, et leRender appuyer bouton fonctionnera (malgré le fait qu'il s'agisse du deuxième bouton du formulaire).

Exemple:

    <button id='close_renderer_button' class='btn btn-success'
            title='Перейти к редактированию программы'
            type=button>
      <span class='glyphicon glyphicon-edit'> </span> Edit program
    </button>
    <button id='render_button' class='btn btn-primary'
            title='Построить фрактал'
            type=submit
            formaction='javascript:alert("Bingo!");'>
      <span class='glyphicon glyphicon-send'> </span> Render
    </button>

Testé dans FF24 et Chrome 35 ( formactionest une fonctionnalité html5, mais typene l'est pas).


17
ne fonctionne que si vous êtes dans un formulaire, l'OP n'utilise pas de formulaire
Andrew

@Andrew Oui, ça m'a manqué. Maintenant, je peux le voir clairement, merci.
dmitry_romanov

4
@Andrew, c'est vrai, mais il est trivial dans la plupart des cas de l'envelopper dans une forme de ne rien faire ...
Stephen Chung

2
De plus, cette solution fonctionne sur le bouton [Go] du clavier virtuel iOS dont l'action par défaut est de soumettre.
Elemental

10
  1. Remplacez le buttonpar unsubmit
  2. Soyez progressif , assurez-vous d'avoir une version côté serveur
  3. Liez votre JavaScript au submitgestionnaire du formulaire, pas au clickgestionnaire du bouton

Appuyer sur Entrée dans le champ déclenchera la soumission du formulaire et le gestionnaire de soumission se déclenchera.


6

Vous pouvez ajouter un gestionnaire d'événements à votre entrée comme ceci:

document.getElementById('addLinks').onkeypress=function(e){
    if(e.keyCode==13){
        document.getElementById('linkadd').click();
    }
}

2

Cela fonctionne lorsque input type = "button" est remplacé par input type = "submit" pour le bouton par défaut qui doit être déclenché.


1

Tout d'abord, ajoutez le fichier de bibliothèque jquery jquery et appelez-le dans votre tête html.

puis Utiliser le code basé sur jquery ...

$("#id_of_textbox").keyup(function(event){
    if(event.keyCode == 13){
        $("#id_of_button").click();
    }
});

1

Cela devrait le faire, j'utilise jQuery, vous pouvez écrire du javascript brut.
Remplacez sendMessage()par votre fonctionnalité.

$('#addLinks').keypress(function(e) {
    if (e.which == 13) {
        sendMessage();
        e.preventDefault();
    }
});

1

Sur la base de certaines réponses précédentes, j'ai trouvé ceci:

<form>
  <button id='but' type='submit'>do not click me</button>
  <input type='text' placeholder='press enter'>
</form>

$('#but').click(function(e) {
  alert('button press');
  e.preventDefault();
});

Jetez un œil au violon

EDIT: Si vous ne souhaitez pas ajouter d'éléments html supplémentaires, vous pouvez le faire avec JS uniquement:

    $("input").keyup(function(event) {
        if (event.keyCode === 13) {
            $("button").click();
        }
    });     

0

J'ai trouvé le howto w3schools.com, leur page essayez-moi est la suivante.

https://www.w3schools.com/howto/tryit.asp?filename=tryhow_js_trigger_button_enter

Cela fonctionnait dans mon navigateur habituel mais ne fonctionnait pas dans mon application php qui utilise le navigateur php intégré.

Après avoir joué un peu, j'ai proposé l'alternative JavaScript pure suivante qui fonctionne pour ma situation et devrait fonctionner dans toutes les autres situations:

    function checkForEnterKey(){
        if (event.keyCode === 13) {
            event.preventDefault();
            document.getElementById("myBtn").click();
        }
    }

    function buttonClickEvent()
    {
        alert('The button has been clicked!');
    }

HTML Appuyez sur la touche Entrée dans la zone de texte pour activer le bouton.

    <br />
    <input id="myInput" onkeyup="checkForEnterKey(this.value)">
    <br />
    <button id="myBtn" onclick="buttonClickEvent()">Button</button>

-1
<input type="text" id="input_id" />    

$('#input_id').keydown(function (event) {
    if (event.keyCode == 13) { 
         // Call your function here or add code here
    }
});

-2

J'utilise un bouton kendo. Cela a fonctionné pour moi.

<div class="form-group" id="indexform">
    <div class="col-md-8">
            <div class="row">
                <b>Search By Customer Name/ Customer Number:</b>
                @Html.TextBox("txtSearchString", null, new { style = "width:400px" , autofocus = "autofocus" })
                @(Html.Kendo().Button()
                    .Name("btnSearch")
                    .HtmlAttributes(new { type = "button", @class = "k-primary" })
                    .Content("Search")
                    .Events(ev => ev.Click("onClick")))
            </div>
    </div>
</div>
<script>
var validator = $("#indexform").kendoValidator().data("kendoValidator"),
          status = $(".status");
$("#indexform").keyup(function (event) {
    if (event.keyCode == 13) {
        $("#btnSearch").click();
    }
});
</script>
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.