根据输入值克隆div

阿比克

我有一个要基于用户输入值克隆的div。在使用默认值加载页面时,它可以正常工作,但是当该值更改时,它会成倍增加。例如,默认输入值为3,并且在页面加载时,它会将现有的div克隆两次,使其成为3 div,但是当我将该值增加到4时,它将显示为12。这是HTML:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<label for="cta-num-select">Show Items: </lebel><input id="cta-num-select" name="cta-num-select" type="text" value="3" size="2">
<div class="cta-block">
    <div class="cta-block-item-wrap cta-icon-image">
        <label for="item-chooser">FA Icon/Image: </label><select class="item-chooser" name="item-chooser"><option value="fontawesome">FontAwesome Icon</option><option value="image">Image</option></select>
    </div>
    <div class="cta-block-item-wrap cta-option cta-option-image">
        <label for="block-image">Upload Image: </label><input name="block-image" class="block-image" type="text" value=""><input type="button" class="cta-insert-image button button-primary button-large" value="Upload">
    </div>
    <div class="cta-block-item-wrap cta-option cta-option-fontawesome">
        <label for="fa-icon-class">Choose FA Icon: </label><input type="text" name="fa-icon-class" class="fa-icon-class" value="">
    </div>
</div>  

而且,jQuery:

$('#cta-num-select').on('change', function(){
    var noi = $(this).val();
    var e = $('.cta-block');
    e.not(':first').remove();
    //var present = e.length;
        for (var i = 0; i < (noi -1); i++) {
                e.clone().insertAfter(e);
        }
}).trigger('change');
$('.item-chooser').on('change', function() {
    var $this=$(this),
    $container=$this.closest('.cta-block'),
    option = $this.val();
    $container.find('.cta-option').slideUp();
    $container.find('.cta-option-'+option).stop(true).slideDown();
}).trigger('change');  

我做了一个小提琴,目的是更好地说明我面临的问题。请帮忙

阿伦·约翰尼(Arun P Johny)

这是因为即使您从dom中删除除第一个克隆之外的所有克隆,它们e仍将具有所有元素。

您应该只克隆第一个元素

$('#cta-num-select').on('change', function () {
    var noi = $(this).val();
    var e = $('.cta-block');
    e.not(':first').remove();
    //var present = e.length;
    for (var i = 0; i < (noi - 1); i++) {
        e.first().clone().insertAfter(e);
    }

}).trigger('change');

除了删除和添加所有元素外,我可能会使用稍微不同的实现,例如

$('#cta-num-select').on('change', function() {
  var noi = +$(this).val() || 0;
  noi = noi < 1 ? 1 : noi;

  var e = $('.cta-block'),
    $first = e.first();
  e.slice(noi).remove();
  for (var i = e.length; i < noi; i++) {
    $first.clone().insertAfter('.cta-block:last');
  }
}).trigger('change');
$('.item-chooser').on('change', function() {
  var $this = $(this),
    $container = $this.closest('.cta-block'),
    option = $this.val();
  $container.find('.cta-option').slideUp();
  $container.find('.cta-option-' + option).stop(true).slideDown();
}).trigger('change');
.cta-block-item-wrap {
  border-bottom: 1px solid #eeeeee;
  padding: 10px 0;
}
.cta-image-upload,
.cta-fa-icon {
  display: none;
}
.cta-block-item-wrap > label {
  font-size: 12px;
  font-weight: bold;
  margin: 0 50px 0 0;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<label for="cta-num-select">Show Items:</label>
<input id="cta-num-select" name="cta-num-select" type="text" value="3" size="2">
<div class="cta-block">
  <div class="cta-block-item-wrap cta-icon-image">
    <label for="item-chooser">FA Icon/Image:</label>
    <select class="item-chooser" name="item-chooser">
      <option value="fontawesome">FontAwesome Icon</option>
      <option value="image">Image</option>
    </select>
  </div>
  <div class="cta-block-item-wrap cta-option cta-option-image">
    <label for="block-image">Upload Image:</label>
    <input name="block-image" class="block-image" type="text" value="">
    <input type="button" class="cta-insert-image button button-primary button-large" value="Upload">
  </div>
  <div class="cta-block-item-wrap cta-option cta-option-fontawesome">
    <label for="fa-icon-class">Choose FA Icon:</label>
    <input type="text" name="fa-icon-class" class="fa-icon-class" value="">
  </div>
</div>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

jQuery使用输入字段(和相对值)克隆div

来自分类Dev

jQuery根据输入检查值隐藏div

来自分类Dev

是否可以在克隆的DIV中实时克隆输入字段值?如何?

来自分类Dev

克隆包含剑道输入的div

来自分类Dev

克隆表格输入并清除值

来自分类Dev

根据用户输入值显示DIV元素之一

来自分类Dev

RactiveJS:根据文本输入值过滤DIV元素

来自分类Dev

克隆div中输入块的AJAX更新

来自分类Dev

克隆div中输入块的AJAX更新

来自分类Dev

克隆并动态设置输入名称值

来自分类Dev

jQuery克隆并追加到输入值

来自分类Dev

根据子项隐藏的输入值查找div并在div上更改CSS类

来自分类Dev

如何将用于数学的检查输入值用作克隆 div 元素的一部分

来自分类Dev

jQuery,将输入值传递给克隆的输入字段

来自分类Dev

根据文本输入过滤div

来自分类Dev

根据输入更新Div类

来自分类Dev

根据输入元素定位 DIV

来自分类Dev

根据输入值启用按钮

来自分类Dev

根据序列输入复制值

来自分类Dev

根据选择输入更改输入值

来自分类Dev

JS-如何根据输入值设置div的宽度和高度?

来自分类Dev

JS-如何根据输入值设置div的宽度和高度?

来自分类Dev

如何根据范围滑块中选择的值创建具有多个输入的动态 <div> ?

来自分类Dev

根据输入值分配 PHP 值

来自分类Dev

根据选定的下拉值设置输入值

来自分类Dev

Vue,点击可克隆div但具有唯一输入

来自分类Dev

JavaScript克隆内部HTML,然后根据该克隆文本创建新的div

来自分类Dev

克隆的输入字段数组的唯一ID值

来自分类Dev

jQuery,获取所有克隆输入字段的所有值