"this" is a text field, "new_id" is an integer.
When I apply the following snippet:
$(this).attr('id', this.id + '_' + new_id); $(this).attr('name', this.name + '_' + new_id); $(this).attr('value', 'test');
the id changes, the name changes too, but not the value. If I change the last line to this (and therefore use a string literal)
$('#mytextfield_3').attr('value', 'test');
it works.
Any ideas?
-- EDIT -- Thanks to Steerpike for the quick plugin test - i believe it should work, but i can't find the error.
Here's some more code:
I create the clone using
clone = $(this).find('.clone_fields_container:first').clone();
"clone" now contains a div which has embedded input fields.
After generating a new 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); });
The text fields do not have any values.
I just wrote a quick plugin to run a test using your same snippet and it works fine
$.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() }); <body> <div id="container"> <input type="text" name="field_name" id="field_id" value="meh" /> </div> </body>
So I can only presume something else is going on in your code. Can you provide some more details?
Did you try
$(this).val('test');
instead of
$(this).attr('value', 'test');
val()
is generally easier, since the attribute you need to change may be different on different DOM elements.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With