2016-04-26 157 views
1

我有以下表克隆錶行

<table id="customFields" class="table table-bordered table-hover additionalMargin alignment"> 
    <thead> 
    <tr> 
     <th colspan="2"></th> 
     <th>Some Title</th> 
    </tr> 
    </thead> 
    <tbody> 
     <tr> 
      <td><label class="subjectline" for="User1">User NOC M1</label></td> 
      <td id="slLabel">SLA</td> 
      <td id="slInput"><input type="text" name="slOptions[User][NOC M1]" class="form-control" id="User1"></td> 
      <td><a class="addCF" href="javascript:void(0);">+ additional user</a></td> 
     </tr> 
    </tbody> 
</table> 

然後我有以下的JavaScript來添加其他行

$(function() { 
    $(".addCF").click(function(){ 
     $("#customFields").append('<tr><td></td><td>SL_B</td> <td><input type="text" name="slOptions[User][NOC M1]" class="form-control" id="User1"></td> <td> &nbsp; <a href="javascript:void(0);" class="remCF">Remove</a></td></tr>'); 
    }); 
    $("#customFields").on('click','.remCF',function(){ 
     $(this).parent().parent().remove(); 
    }); 
}); 

這目前是我怎麼想它。但是,我遇到了一些問題。

首先,當你第一次看到它時,你會看到標籤SL_A。在克隆版本中,我手動將其設置爲SL_B。所有其他克隆都有SL_B。我想要做的是讓SL_跟着字母表中的下一個字母。所以第三行應該是SL_C。我不太確定我如何才能做到這一點。

我的第二個問題涉及克隆輸入的名稱。目前,它們都具有相同的名稱,例如slOptions[User][NOC M1] 當添加新行時,該名稱應該改變爲獨特的東西,可能使用上面的字母表的附加字母,例如, slOptions[User][NOC M1B]

是否有可能實現這些目標?

我已經設置了Fiddle示範

感謝

回答

1

你可以存儲到可能出現的字母參考以及您當前的字母,然後在您的功能內確定合適的使用方法:

// Store the possible letters 
var possibleLetters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; 
// Store the current letter 
var currentLetter = 'A'; 

$(function() { 
    $(".addCF").click(function(){ 
     // Resolve the next letter to add 
     var nextIndex = possibleLetters.indexOf(currentLetter) + 1; 
     // Update your reference 
     currentLetter = possibleLetters[nextIndex]; 
     // Append it 
     $("#customFields").append('<tr><td></td><td>SL_' + currentLetter + '</td> <td><input type="text" name="slOptions[User][NOC M1' + currentLetter + ']"...'); 
     // More code omitted for brevity 
    }); 
    // Still more code omitted for brevity 
}); 

您可以see an example of this in action here及以下證明:

enter image description here

+0

謝謝你,偉大的作品。一個問題,如果我添加一行,使其SL_B,然後刪除該行,然後讀取它,然後它具有SL_C。是否有可能再次擁有SL_B?謝謝 –

+0

當然,你可能只需要調整你的刪除按鈕來推回前一封信[類似於這種方法](https://gist.github.com/Rionmonster/745bd50a900c541f0e83d0df0c223cd5)。另一種方法仍然是使用正在使用的字母和未使用的字母來存儲兩個陣列,以便您可以確定哪些已刪除,然後按預期重新使用它們。它最終取決於你的喜好。 –

1

這裏是你的兩個問題的解決方案: 參見:https://jsfiddle.net/pdxgrpqz/

$(function() { 
    alp = "A"; 
    $(".addCF").click(function(){ 
    alp = (alp.substring(0,alp.length-1)+String.fromCharCode(alp.charCodeAt(alp.length-1)+1)); 
    $("#customFields").append('<tr><td></td><td>SL_'+alp+'</td> <td><input type="text" name="slOptions[User][NOC M1'+alp+']" class="form-control" id="User1"></td> <td> &nbsp; <a href="javascript:void(0);" class="remCF">Remove</a></td></tr>'); 
    }); 
    $("#customFields").on('click','.remCF',function(){ 
     $(this).parent().parent().remove(); 
    }); 
}); 
+0

謝謝你,偉大工程。一個問題,如果我添加一行,使其SL_B,然後刪除該行,然後讀取它,然後它具有SL_C。是否有可能再次擁有SL_B?謝謝 –

+0

我認爲你將需要重置td lable的名稱,在這種情況下..這僅僅是我能想到的解決方案.. –