Подтвердить что ты не робот

Установить новый идентификатор с помощью jQuery

"this" - текстовое поле, "new_id" - целое число.

Когда я применяю следующий фрагмент:

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

Идентификатор изменяется, имя изменяется тоже, но не значение. Если я изменю последнюю строку на это (и поэтому использую строковый литерал)

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

он работает.

Любые идеи?

- EDIT - Благодаря Steerpike для быстрого тестирования плагина - я считаю, что он должен работать, но я не могу найти ошибку.

Вот еще код:

Я создаю клон, используя

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

"clone" теперь содержит div, у которого есть встроенные поля ввода.

После создания нового 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);
  });

Текстовые поля не имеют никаких значений.

4b9b3361

Ответ 1

Я просто написал быстрый плагин для запуска теста с использованием одного и того же фрагмента, и он отлично работает

$.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>

Поэтому я могу только предположить, что в вашем коде происходит что-то еще. Можете ли вы предоставить более подробную информацию?

Ответ 2

Вы пробовали

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

вместо

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

val() обычно проще, так как атрибут, который вам нужно изменить, может отличаться для разных элементов DOM.

Ответ 3

EDIT: на основе вашего комментария и предполагая, что this - это клонированный элемент.

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

Полный пример

 <script type="text/javascript">
    var new_id = 0;
    $(document).ready( function() {
       $('#container > input[type=button]').click( function() {
            var oldinp = $('input#inp')[0];
            var newinp = $(oldinp).clone()
                                  .attr('id',oldinp.id + new_id )
                                  .attr('name',oldinp.name + new_id )
                                  .val('test')
                                  .appendTo($('#container'));
            $('#container').append('<br>');
            new_id++;
        });
     });
 </script>


 <div id="container">
 <input type="button" value="Clone" /><br/>
 <input id="inp" name="inp" type="text" value="hmmm" /><br/>
 </div>

Ответ 4

Что происходит, когда вы устанавливаете все атрибуты в одной attr() команде, например так

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

Ответ 5

Используйте .val() not attr('value').