2016-09-29 156 views
1

我遇到克隆選擇和刪除問題。克隆選擇並繼續克隆或刪除克隆的選擇

我想要什麼:

  1. 當改變一個選擇,我要克隆的選擇所以有一個新的選擇。
  2. 更改克隆選擇也會添加一個新選擇。
  3. 選擇可被移除
  4. 總共可存在最多5個選擇,但至少1選擇具有增加的數字
  5. 更新標籤。如果中間的一個將被刪除,則所有選擇都將獲得新的標籤號碼。

我做了一個JSFiddle

錯在:

  • 克隆,你也可以選擇刪除後。它可以是任何選擇,但必須始終有一個不能刪除的選擇。刪除克隆也必須更新數字。

這裏是我的代碼:

$(document).ready(function() { 
    var selectsCount = 1; 
    $('.box label').text('Selector ' + (selectsCount++)); 
    $('.box select').on('change', function() { 
     if (selectsCount < 5) { 
      var cloned = $('.box').last().clone(true).insertAfter($(this).parents('.box:last')); 
      cloned; 
      cloned.find("label").text('test Selector ' + (selectsCount++)); 
     } 
    }); 

    $(".cancelSelect").on('click', function() { 
     var parentBox = $(this).parents('.box'); 
     parentBox.find('select').prop('selectedIndex', 0); 
     parentBox.remove(); 
    }); 
}); 

見我JSFiddle

回答

0

true作爲參數在jQuery.clone(true)

.clone([withDataAndEvents ])布爾值,指示是否事件處理程序應與元素一起復制。

--selectsCount;如果您刪除select輸入。

$(document).ready(function() { 
 
    function updateLabel() { 
 
    $('.selectBox label').each(function(index) { 
 
     this.textContent = 'test Selector ' + (index + 1); 
 
    }); 
 
    } 
 
    var selectsCount = 1; 
 
    $('.box label').text('Selector ' + (selectsCount++)); 
 
    $('.box select').on('change', function() { 
 
    if (selectsCount < 5) { 
 
     var cloned = $('.box').last().clone(true).insertAfter($(this).parents('.box:last')); 
 
     cloned.find("label").text('test Selector ' + (selectsCount++)); 
 
     updateLabel(); 
 
    } 
 
    }); 
 

 
    $(".cancelSelect").on('click', function() { 
 
    if ($('.selectBox').length > 1) { 
 
     var parentBox = $(this).parents('.box'); 
 
     parentBox.find('select').prop('selectedIndex', 0); 
 
     parentBox.remove(); 
 
     --selectsCount; 
 
     updateLabel(); 
 
    } else { 
 
     alert('Can not delete all'); 
 
    } 
 
    }); 
 
});
.box { 
 
    overflow: hidden; 
 
    margin-bottom: 10px; 
 
} 
 
label, 
 
select { 
 
    display: block; 
 
    margin-bottom: 3px; 
 
} 
 
.selectBox { 
 
    float: left; 
 
    display: inline-block; 
 
    margin-right: 10px; 
 
} 
 
.cancelSelect { 
 
    float: left; 
 
    display: inline-block; 
 
    color: red; 
 
    font-weight: 700; 
 
    cursor: pointer; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> 
 
<div class="selectorClones"> 
 
    <div class="box"> 
 
    <div class="selectBox"> 
 
     <label></label> 
 
     <select class="select1" name="select1"> 
 
     <option value="first">First choice</option> 
 
     <option value="second">Second choice</option> 
 
     <option value="third">Third choice</option> 
 
     </select> 
 
    </div> 
 
    <div class='cancelSelect'> 
 
     X 
 
    </div> 
 
    </div> 
 
</div>

+0

謝謝你,這麼近又那麼遠!所以有一個問題留下來,這是1選擇必須留下來,不能刪除+刪除選擇後更新數字。 – Teezii

+0

@Teezii - 你能多解釋一下... – Rayon

+0

現在我們可以刪除所有的選擇。我想要的是你可以刪除所有選擇,但是1,但是刪除哪一個並不重要。刪除選擇必須再次更新號碼。 – Teezii

0

請試試這個。

$(document).ready(function() { 
 
    $(document).on('change','.box select', function() { 
 
    //Find total select box length 
 
    var selectsCount = parseInt($('.box select').length); 
 
    if (selectsCount < 5) { 
 
     var cloned = $('.box').last().clone().insertAfter($(this).parents('.box:last')); 
 
     cloned; 
 
     //Update select box length 
 
     selectsCount = parseInt($('.box select').length); 
 
     cloned.find("label").text('Selector ' + (selectsCount)); 
 
    } 
 
    //Update the select box label 
 
    var _selectsCount = 1; 
 
    $('.box label').each(function(){ 
 
     $(this).text('Selector ' + (_selectsCount++)); 
 
    }); 
 
    }); 
 
    
 
    //Remove the select box on remove selectbox 
 
    $(document).on('click',".cancelSelect", function() { 
 
    var parentBox = $(this).parents('.box'); 
 
    parentBox.find('select').prop('selectedIndex', 0); 
 
    parentBox.remove(); 
 
    //Update the select box label 
 
    var _selectsCount = 1; 
 
    $('.box label').each(function(){ 
 
     $(this).text('Selector ' + (_selectsCount++)); 
 
    }); 
 
    }); 
 
});
.box { 
 
    overflow: hidden; 
 
    margin-bottom: 10px; 
 
} 
 

 
label, 
 
select { 
 
    display: block; 
 
    margin-bottom: 3px; 
 
} 
 

 
.selectBox { 
 
    float: left; 
 
    display: inline-block; 
 
    margin-right: 10px; 
 
} 
 

 
.cancelSelect { 
 
    float: left; 
 
    display: inline-block; 
 
    color: red; 
 
    font-weight: 700; 
 
    cursor: pointer; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="selectorClones"> 
 
    <div class="box"> 
 
    <div class="selectBox"> 
 
     <label>Selector 1</label> 
 
     <select class="select1" name="select1"> 
 
     <option value="first">First choice</option> 
 
     <option value="second">Second choice</option> 
 
     <option value="third">Third choice</option> 
 
     </select> 
 
    </div> 
 
    <div class='cancelSelect'> 
 
     X 
 
    </div> 
 
    </div> 
 
</div>

+0

非常感謝Rahul! – Teezii

+0

@Teezii您將能夠檢查片段中的選擇框可以被克隆到5,並且在刪除或添加任何選擇框的任何地方,任何選擇框的標籤將被更新。 –

+0

@Rayon刪除它。但是在我成功解決了SO的問題之後,我已經評論過了。 –