Rilevamento della modifica del valore dell'input [tipo = testo] in jQuery


159

Voglio eseguire una funzione ogni volta che cambia il valore di una specifica casella di input. Funziona quasi con $('input').keyup(function), ma non accade nulla quando si incolla il testo nella casella, ad esempio. $input.change(function)si attiva solo quando l'input è sfocato, quindi come faccio a sapere immediatamente ogni volta che una casella di testo ha cambiato valore?


2
Quindi perché non legare entrambi keyupe gli pasteeventi?
Ilia G,

devcurry.com/2009/07/… - Rilevamento di eventi taglia / copia / incolla
BeRecursive

2
@ liho1eye pasteè solo uno a cui ho pensato, preferirei ascoltare un cambiamento definitivo piuttosto che pensare a tutti i diversi percorsi in entrata.
Jeriko,

@Jeriko Questo è l'unico modo per modificare il valore (oltre all'ovvio aggiornamento tramite codice js).
Ilia G,

Vuoi anche catturare Ctlr-X ( cut).
Alexis Wilke,

Risposte:


344

ricorda solo che 'on' è raccomandato sulla funzione 'bind', quindi cerca sempre di usare un listener di eventi come questo:

$("#myTextBox").on("change paste keyup", function() {
   alert($(this).val()); 
});

Perché pasteperò? Per prima cosa ho pensato che funzionasse solo se incolliamo qualcosa con CTRL+V.
Nero

3
@ NicolasS.Xu: l'assegnazione diretta dei valori non attiva alcun evento DOM
Alejandro Silva,

Sarebbe ancora meglio se si utilizza console.log()invece di alert. Sarebbe molto fastidioso per il keyup alert.
cytsunny,

4
@cytsunny sì, l'avviso è fastidioso, ma in questo caso è un esempio del codice da eseguire sulla modifica del valore, può davvero essere qualsiasi payload desiderato.
Alejandro Silva,

1
Se fai clic con il pulsante destro del mouse e incolla, questo restituirà il valore dell'input prima dell'incollaggio.
alstr

104

Descrizione

Puoi farlo usando il .bind()metodo di jQuery . Dai un'occhiata al jsFiddle .

Campione

html

<input id="myTextBox" type="text"/>

jQuery

$("#myTextBox").bind("change paste keyup", function() {
   alert($(this).val()); 
});

Maggiori informazioni



6

puoi anche utilizzare gli eventi della casella di testo -

<input id="txt1" type="text" onchange="SetDefault($(this).val());" onkeyup="this.onchange();" onpaste="this.onchange();" oninput="this.onchange();">

function SetDefault(Text){
  alert(Text);
}

Prova questo


5

Prova questo:

Fondamentalmente, basta tenere conto di ogni evento:

html:

<input id = "textbox" type = "text">

jquery:

$("#textbox").keyup(function() { 
    alert($(this).val());  
}); 

$("#textbox").change(function() { 
alert($(this).val());  
}); 

3
$("#myTextBox").on("change paste keyup select", function() {
     alert($(this).val());
});

selezionare per il suggerimento del browser


2

Prova questo:

$("input").bind({
            paste : function(){
                $('#eventresult').text('paste behaviour detected!');
            }
})


0

Questa combinazione di eventi ha funzionato per me:

$("#myTextBox").on("input paste", function() {
   alert($(this).val()); 
});

0

NON DIMENTICARE IL cuto selecteventi!

La risposta accettata è quasi perfetta, ma dimentica gli eventi cute select.

cut viene attivato quando l'utente taglia il testo (CTRL + X o con il tasto destro del mouse)

select viene attivato quando l'utente seleziona un'opzione suggerita dal browser

Dovresti anche aggiungerli, come tali:

$("#myTextBox").on("change paste keyup cut select", function() {
   //Do your function 
});
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.