2012-01-27 35 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