schneck schneck - 1 year ago 67
Javascript Question

Set new id with jQuery

"this" is a text field, "new_id" is an integer.

When I apply the following snippet:

$(this).attr('id', + '_' + new_id);
$(this).attr('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', + '_' + new_id);
$(this).attr('name', + '_' + new_id);

The text fields do not have any values.

Answer Source

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', + '_' + new_id);
        $(this).attr('name', + '_' + new_id);
        $(this).attr('value', 'test');

$(document).ready(function() {

  <div id="container">

  <input type="text" name="field_name" id="field_id" value="meh" />

So I can only presume something else is going on in your code. Can you provide some more details?

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download