Come attivare il pulsante HTML quando si preme Invio nella casella di testo?


106

Quindi il codice che ho finora è:

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

Non è in a <form>ed è proprio come è all'interno di a <div>. Tuttavia, quando textboxdigito qualcosa nella chiamata "addLinks", voglio che l'utente sia in grado di premere Invio e attivare il "linkadd" buttonche eseguirà una funzione JavaScript.
Come posso fare questo?
Grazie

Modifica: ho trovato questo codice, ma non sembra funzionare.

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

3
associa a keypresse controlla per e.charCode==13(pulsante invio).
Brad Christie

Hai aggiunto il riferimento alla libreria jquery prima di utilizzare il codice sopra?
Milind Anantwar

Sì, ho fatto riferimento alla libreria, non sono sicuro del motivo per cui non funzionasse, ma ora va bene. Grazie
Ben

Sì, come menzionato da @BradChristie, keypresso keydownmenzionato in questa risposta, è la strada da percorrere.
metakermit

Risposte:


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

5
anche l'aggiunta di "return false" dopo l'evento di clic è utile, per evitare un
invio

La risposta di dmitry_romanov è migliore perché è puro html.
McKay

6
@ McKay, no non lo è. I pulsanti possono essere usati per cose oltre ai moduli. In effetti, la domanda dell'OP non è esplicitamente in una forma.
Dan

2
@deebs ha ragione, non sono sicuro di quello che ho fatto quel giorno ma devo aver avuto una scoreggia cerebrale.
Tim at MastersAllen


77

È …… 2020. E credo che questo sia ancora vero.


NON USARE keypress

  1. keypressevento è non attivato quando l'utente preme un tasto che non produce alcun carattere , come ad esempio Tab, Caps Lock, Delete, Backspace, Escape, sinistra e destra Shift, tasti funzione ( F1- F12).

    keypressevento Mozilla Developer Network

    L' keypressevento viene generato quando un tasto viene premuto e quel tasto normalmente produce un valore di carattere . Usa inputinvece.

  2. È stato deprecato.

    keypressEventi dell'interfaccia utente dell'evento (bozza di lavoro del W3C pubblicata l'8 novembre 2018.)

    • NOTA | L' keypressevento è tradizionalmente associato al rilevamento di un valore di carattere piuttosto che di una chiave fisica e potrebbe non essere disponibile su tutte le chiavi in ​​alcune configurazioni.
    • ATTENZIONE | Il keypresstipo di evento è definito in questa specifica per riferimento e completezza, ma questa specifica depreca l'uso di questo tipo di evento. Quando si trovano in contesti di modifica, gli autori possono invece iscriversi beforeinputall'evento.

NON USARE KeyboardEvent.keyCode

  1. È stato deprecato.

    KeyboardEvent.keyCode Mozilla Developer Network

    Deprecato | Questa funzione non è più consigliata. Sebbene alcuni browser possano ancora supportarlo, potrebbe essere già stato rimosso dagli standard web pertinenti, potrebbe essere in procinto di essere abbandonato o potrebbe essere conservato solo per scopi di compatibilità. Evita di usarlo e aggiorna il codice esistente se possibile; consulta la tabella di compatibilità in fondo a questa pagina per guidare la tua decisione. Tieni presente che questa funzione potrebbe cessare di funzionare in qualsiasi momento.


Cosa dovrei usare allora? (La buona pratica)

// 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;`.
});

che ne dici di if (event.key == "Enter") { document.querySelector("#linkadd").click(); } :?
Anupam

2
Tieni presente che .keynon è supportato in tutti i browser: caniuse.com/#feat=keyboardevent-key : circa il 10% delle persone utilizza browser che non lo supportano.
Martin Tournoij

72

C'è una soluzione js-free.

Impostare type=submitsul pulsante che si desidera impostare come predefinito e type=buttonsu altri pulsanti. Ora nel modulo sottostante puoi premere Invio in qualsiasi campo di input e il Renderpulsante funzionerà (nonostante sia il secondo pulsante nel modulo).

Esempio:

    <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>

Testato in FF24 e Chrome 35 ( formactionè una funzionalità html5, ma typenon lo è).


17
funziona solo se sei all'interno di un modulo, l'OP non sta utilizzando un modulo
Andrew

@ Andrew Sì, mi sono perso. Ora posso vederlo chiaramente, grazie.
dmitry_romanov

4
@Andrew, vero, ma nella maggior parte dei casi è banale racchiuderlo in una forma che non fa nulla ...
Stephen Chung

2
Inoltre, questa soluzione funziona sul pulsante [Vai] della tastiera virtuale iOS la cui azione predefinita è inviare.
Elementale

10
  1. Sostituisci buttoncon un filesubmit
  2. Sii progressista , assicurati di avere una versione lato server
  3. Associa il tuo JavaScript al submitgestore del modulo, non al clickgestore del pulsante

Premendo invio nel campo si attiverà l'invio del modulo e il gestore di invio si attiverà.


6

Potresti aggiungere un gestore di eventi al tuo input in questo modo:

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

2

Funziona quando input type = "button" viene sostituito con input type = "submit" per il pulsante predefinito che deve essere attivato.


1

Prima di tutto aggiungi il file della libreria jquery jquery e chiamalo nella tua testata html.

e quindi Usa codice basato su jquery ...

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

1

Questo dovrebbe farlo, sto usando jQuery puoi scrivere javascript semplice.
Sostituisci sendMessage()con la tua funzionalità.

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

1

Sulla base di alcune risposte precedenti, mi è venuto in mente questo:

<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();
});

Dai un'occhiata al violino

EDIT: Se non vuoi aggiungere ulteriori elementi html, puoi farlo solo con JS:

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

0

Ho trovato l'howto di w3schools.com, la loro pagina provami è la seguente.

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

Funzionava nel mio browser normale ma non funzionava nella mia app php che utilizza il browser php integrato.

Dopo aver giocato un po 'ho trovato la seguente alternativa JavaScript pura che funziona per la mia situazione e dovrebbe funzionare in ogni altra situazione:

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

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

HTML Premere il tasto Invio all'interno della casella di testo per attivare il pulsante.

    <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

Sto usando un pulsante di kendo. Questo ha funzionato per me.

<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>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.