La modifica di jQuery .val non cambia il valore di input


103

Ho un input HTML con un collegamento nel valore.

<input type = 'text' value = 'http://www.link.com' id = 'link' />

Sto usando jQuery per modificare il valore su un determinato evento.

$('#link').val('new value');

Il codice precedente modifica il valore della casella di testo ma non cambia il valore nel codice (valore = "http://www.link.com" rimane invariato). Ho bisogno che anche il valore = '' cambi.


Cosa intendi con in the code? Stai guardando la fonte originale (quindi non modificata) della pagina?
Frédéric Hamidi

Utilizzo dell'elemento inspect di Chrome.
Lukas

3
@Luke Il valore cambierà, ma il valore visibile dell'elemento HTML nell'ispettore di Chrome no. Prova quindi ad avvisare il valore o a inviarlo alla console e vedrai che è cambiato. Vedi, è cambiato: jsfiddle.net/a8SxF
TheZ

Sì, ora lo vedo. Sto usando zClip per copiare il valore negli appunti ma sta copiando il vecchio valore dopo che è stato modificato. Penso di poterlo risolvere con un po 'di scherzi.
Lukas

Risposte:


177

Usa attrinvece.
$('#link').attr('value', 'new value');

demo


6
Questo è totalmente corretto, usando setAttributeo jQuery attrinfluenzerai anche il valore dell'elemento DOM: jsfiddle.net/a8SxF/1
TheZ

4
@TheZ è perché il flag del valore sporco dell'input è falso. Prova a interagire con l'input (il valore è sporco dopo l'input dell'utente) e quindi setAttribute
Esailija

5
Ma quando vuoi ottenere html con .html(), allora ci sarà sempre lo stesso vecchio valore, non importa, se usi .val('new value')o attr('value', 'new value')... :(
Legionar

6
Ha codificato un mucchio enorme e complicato di funzioni usando .val (come suggerito da tutto ciò che ho letto in precedenza) e ha avuto lo stesso identico problema. Maledettamente fastidioso! Questa risposta dovrebbe essere il primo punto di riferimento per tutti i neofiti di jQuery che cercano di aggiornare dinamicamente gli elementi del modulo. Mi avrebbe risparmiato un bel po 'di ore se avessi letto prima questo!
Concessione

2
Questo è il motivo per cui è così difficile partire con JavaScript / JQuery, così tanti avvertimenti come questo. Questo mi ha aiutato molto. Grazie!
eaglei22

13

La modifica della proprietà value non modifica il file defaultValue. Nel codice (recuperato con .html()o innerHTML) l'attributo value conterrà la defaultValue, non la proprietà value.


1
Questo lo spiega. La digitazione inoltre non cambia il <input id = 'a' value> ma influisce sul risultato di $ ("# a"). Val (). Una domanda solo per essere sicuri: $ ("# a"). Val (value) è davvero il modo corretto di cambiare il valore di un elemento di input, in modo che venga inviato il valore giusto?
Daniel Katz,

1
Si, è corretto. la modifica dell'attributo non cambierà ciò che viene inviato.
Kevin B


2

Questo è solo un possibile scenario accaduto a me. Bene, se aiuta qualcuno, allora fantastico: ho scritto un'app complicata che da qualche parte lungo il codice ho usato una funzione per cancellare tutti i valori delle caselle di testo prima di mostrarli. Qualche tempo dopo ho provato a impostare un valore di casella di testo utilizzando jquery val ('value') ma non ho notato che subito dopo ho invocato il metodo ClearAllInputs .. quindi, potrebbe anche accadere.


0

Il mio problema simile era causato dalla presenza di caratteri speciali (ad esempio punti) nel selettore.

La soluzione era di sfuggire ai caratteri speciali:

$("#dots\\.er\\.bad").val("mmmk");

D'accordo, molto male, non dovresti scappare, dovresti rinominare l'ID del tuo elemento.
webaholik

-1
<script src="//code.jquery.com/jquery.min.js"></script>
<script>
function changes() {
$('#link').val('new value');
}
</script>
<button onclick="changes()">a</button>
<input type='text' value='http://www.link.com' id='link'>

1
Sì, questo non aggiorna il valore effettivo però. Aggiorna la casella di testo sullo schermo, ma quando si tenta di inviare un modulo il valore è quello che era quando la pagina è stata originariamente caricata.
Concessione

-1

Per me il problema era che la modifica del valore per questo campo non funzionava:

$('#cardNumber').val(maskNumber);

Nessuna delle soluzioni sopra ha funzionato per me, quindi ho indagato ulteriormente e ho trovato:

Secondo la specifica dell'evento di livello 2 DOM: l'evento di modifica si verifica quando un controllo perde il focus di input e il suo valore è stato modificato da quando ha ottenuto il focus. Ciò significa che l'evento di modifica è progettato per attivarsi al cambiamento tramite l'interazione dell'utente. Le modifiche programmatiche non provocano l'attivazione di questo evento.

La soluzione era aggiungere la funzione trigger e far sì che attivasse l'evento di modifica in questo modo:

$('#cardNumber').val(maskNumber).trigger('change');

-2

Ricontrolla più di un elemento con ID non univoco! Questa era la mia situazione con il ciclo foreach e la duplicazione dei miei ID.

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.