jQuery - как добавить новое имя в клонированный выбор - PullRequest
0 голосов
/ 27 января 2012

Привет, у меня проблема с кодом:

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

Это jQuery javascript:

    $(document).ready(function() {
        $('#plus').click(function() {
            //variables for input
            var num     = $('.inputCopy').length;
            var newNum  = new Number(num + 1);

            var newInput = $('#input' + num).clone().attr('id', 'input' + newNum);


            newInput.children(':first').attr('id', 'input' + newNum).attr('class','next' + num);

            $('#input' + num).after(newInput);
            $('#del').css({display: ''});

            //if 5 inputs hide add input
            if (newNum == 5)
                $('#add').css({display: 'none'});
        });
.....
    });

и это HTML:

<div class="box0">
 <ul>
   <li>Set of selects to clone</li>
   <li>
    <ul>
     <li></li>
     <li>Select 1</li>
     <li>Select 2</li>
    </ul>
   </li>
   <li id="input1" class="inputCopy">
    <ul class="some">
      <li class="selects">Selects set &new value&</li>
      <li>
        <select name="Select[Ask][&new value&][Adults]" id="parent">
          <option label="1" value="1">1</option>
          <option label="2" value="2">2</option>
          <option label="3" value="3">3</option>
          <option label="4" value="4">4</option>
        </select>
       </li>
       <li>
        <select name="Select[Try][&new value&][Children]" id="children">
         <option label="0" value="0">0</option>
         <option label="1" value="1">1</option>
         <option label="2" value="2">2</option>
         <option label="3" value="3">3</option>
         <option label="4" value="4">4</option>
        </select>
      </li>
    </ul>
   </li>
    <li class="pnav" id="minus"><a href="javascript:void(0);" >delete</a></li>
<li class="pnav" id="plus"><a href="javascript:void(0);" >add selects</a>   </li>
</li>
  </ul>
 </div>

Моя проблема в том, что эти два выбора имеют имена, и я хочу разместить новые значения только там, где я написал & новое значение & как я могу сделать это только для вновь созданного выбора.

, если новый набор выбора ставит 1 и т. д.

Я надеюсь, что мою проблему легко решить, но я не могу найтирешение

1 Ответ

0 голосов
/ 27 января 2012

Я немного изменил сценарий и считаю, что нашел решение (если я правильно понял ваши вопросы).В HTML я заменил "/ новое значение /" на "1", сделав его:

<select name="Select[Ask][1][Adults]" id="parent">

Для скрипта я добавил счетчик ("nextSelectValue"), которая будет содержать значение, которое должно быть вставлено.После завершения клонирования элемента он находит элемент select и заменяет число с помощью выражения regex.Так как это только сторона «плюс», вам необходимо соответственно обновить переменную «nextSelectValue» для стороны «удаления».Вот сценарий:

// Variable for keeping track of what number is next
var nextSelectValue = 2;
var newInput;

$(document).ready(function() {
    $('#plus').click(function() {

      //variables for input
      var num     = $('.inputCopy').length;
      var newNum  = new Number(num + 1);

      // Clone select and update id
      newInput = $('#input' + num).clone().attr('id', 'input' + newNum);

      // Update "new value" and variable "nextSelectValue"
      var selectInput = newInput.find('select');
      selectInput.attr('name', selectInput.attr('name').replace(/\d+/, new String(nextSelectValue)));
      nextSelectValue += 1;

      newInput.children(':first').attr('id', 'pokoj' + newNum).attr('class','next' + num);

      $('#input' + num).after(newInput);
      $('#del').css({display: ''});

      //if 5 inputs hide add input
      if (newNum == 5)
          $('#add').css({display: 'none'});
    });
});

Дайте мне знать, если у вас есть какие-либо проблемы с ним.

РЕДАКТИРОВАТЬ: Если вы используете имя с двумя целыми числами, вместоиз этого:

selectInput.attr('name', selectInput.attr('name').replace(/\d+/, new String(nextSelectValue)));

используйте это

selectInput.attr('name', selectInput.attr('name').replace(/\d(?=[^\d]*\d)/, new String(nextSelectValue)));

Но имейте в виду, это будет работать ТОЛЬКО, если в строке ровно два числа

...