2012-01-27 70 views
0

嗨,我已经得到的代码有问题:jQuery的 - 如何添加新的名称来克隆选择

我笏以广告新名称值新创建的选择,也许我会告诉

这是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等

我希望我的问题很容易解决,但我不能找到解决

+0

因此,当用户选择一个选项时,该名称应该更新为将“/ ***新值*** /替换为选项的值? – pecka85 2012-01-27 15:26:14

回答

0

我修改剧本了一下,我相信我我找到了一个解决方案(如果我确实理解了你的问题)。在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))); 

但要知道,这将只有当它正好有两个工作字符串中的数字

+0

哦,你真棒,这工作正常。非常感谢你:) – arclite 2012-01-27 21:36:55

+0

嗨,我只有一个问题,我如何才能改变名称中的第一个数字,如果我克隆这个名称看起来像这样的元素'Select [Ask] [1] [Adults] [1]'克隆的元素看起来是'Select [Ask] [2] [Adults] [0]'应该是'Select [Ask] [2] [Adults] [1]' – arclite 2012-01-30 11:09:39

+0

嘿!对不起,我迟到的回应,我一直被占领。我稍后会发布一个解决方案到今天,有点忙碌atm:P – pecka85 2012-01-31 12:11:30