Imposta un nuovo ID con jQuery

“questo” è un campo di testo, “new_id” è un numero intero.

Quando applico il seguente snippet:

$(this).attr('id', this.id + '_' + new_id); $(this).attr('name', this.name + '_' + new_id); $(this).attr('value', 'test'); 

l’ID cambia, cambia anche il nome, ma non il valore. Se cambio l’ultima riga a questo (e quindi uso una stringa letterale)

 $('#mytextfield_3').attr('value', 'test'); 

Funziona.

Qualche idea?

– EDIT – Grazie a Steerpike per il test del plugin veloce – credo che dovrebbe funzionare, ma non riesco a trovare l’errore.

Ecco un altro codice:

Creo il clone usando

 clone = $(this).find('.clone_fields_container:first').clone(); 

“clone” ora contiene un div che ha campi di input incorporati.

Dopo aver generato un nuovo ID:

  /** Iterate over input and select fields in container */ clone.children('input,select,textarea').each(function() { $(this).attr('id', this.id + '_' + new_id); $(this).attr('name', this.name + '_' + new_id); $(this).val('test'); console.log(this); }); 

I campi di testo non hanno alcun valore.

Ho appena scritto un plug-in rapido per eseguire un test utilizzando lo stesso snippet e funziona perfettamente

 $.fn.test = function() { return this.each(function(){ var new_id = 5; $(this).attr('id', this.id + '_' + new_id); $(this).attr('name', this.name + '_' + new_id); $(this).attr('value', 'test'); }); }; $(document).ready(function() { $('#field_id').test() });  

Quindi posso solo presumere qualcos’altro sta succedendo nel tuo codice. Potete fornire ulteriori dettagli?

Hai provato

 $(this).val('test'); 

invece di

 $(this).attr('value', 'test'); 

val() è generalmente più semplice, poiché l’attributo che devi cambiare può essere diverso su diversi elementi DOM.

Cosa succede quando imposti tutti gli attributi in un comando attr() modo

 $(this).attr({ id : this.id + '_' + new_id, name: this.name + '_' + new_id, value: 'test' }); 

EDIT : basato sul tuo commento e assumendo che this è l’elemento che è clonato.

  $(this).clone() .attr( 'id', this.id + '_' + new_id ) .attr( 'name', this.name + '_' + new_id ) .val( 'test' ) .appendTo('#someElement'); 

Esempio completo

   


Usa .val() not attr('value') .