2017-04-27 23 views
1

我有以下几乎完美的代码,但它克隆相同的div多次。jQuery克隆创建多个相同的div

不幸的是,一旦您选择它并取消选择一次,如果您选择其他选项,它将开始显示倍数。我认为这与克隆有关。

function selectGameItem() { 

    $('.inventory-item').on('change', function() { 

     var cloneDiv = $(this).clone(); 

     if($(this).parent('.game-inventory').length) { 

      $('.receive-window').append(cloneDiv); 
      $(this).addClass('selected-item'); 

     } else { 

      $(this).remove(); 
      $('.game-label-' + inventoryValue).removeClass('selected-item'); 

     } 

     selectGameItem(); 

    }); 

    } 

} 

回答

2

删除调用selectGameItem();那是你change处理程序的最后一道防线。它将调用.on('change')于已经处理元素,所以下一次事件发生重复的处理程序将运行,那么它们在运行时再次调用selectGameItem()并结合处理程序等

如果你有这条线在那里为了将change处理程序绑定到克隆项目,您不需要这样做。你也可以use .clone(true) to clone the event handlers

$('.inventory-item-hold').on('change', function() { 

到:或者,可能会更好,只是通过改变这条线使用委派事件处理

$(document).on('change', '.inventory-item-hold', function() { 

将自动与动态补充说,有'.inventory-item-hold'类中的任何元素工作。 (理想情况下,你不会使用document,你会使用最近的共同祖先元素是所有的'.inventory-item-hold'元素。)

+0

我删除它,但现在它不会去当一个项目被选中第二次即删除它)。我是新来的这个jQuery/Javascript的东西。 – Maxwell

+0

看我的编辑。 (请注意,你不是第二次选择一个项目,你是第一次选择克隆。) – nnnnnn

+0

'.clone(true)'是我从函数包装器中移除后所需要的在'change'处理程序中再次调用它)。非常感谢您的帮助! – Maxwell