Jquery 弹出窗口克隆丢失点击事件

Jquery popover clone loses click event

我在页面中有一次点击事件。单击后 div 被克隆。但在单击 "popover" 后附加到第一个 div。

这是我创建的示例:https://jsfiddle.net/stinky/d65swy7z/

克隆后,弹出窗口仅在第一次点击时显示。

我试过了

$('.click').on(function(){
  $(this).webuiPopover({url:'#popover-content'});
});

但不起作用。

这是我使用的 popover 插件:https://github.com/sandywalker/webui-popover

您的代码有几个问题:

  1. $('.click').clone(true)clone 方法应用于所有当前存在的 .click 节点,但您只希望它克隆 1 个节点,而不是所有节点。
  2. $('#container').html($cln); 将用一个克隆替换 #container 的全部内容。你要的是$('#container').html($cln);。在你的情况下,由于上面解释的行为,它看起来像是在工作(所有项目都被克隆,而不是只有一个)。
  3. 您需要在没有事件的情况下进行克隆,否则,如您所见,所有克隆都会复制原始文件,即使在弹出窗口的位置也是如此。
  4. 由于上述原因,您需要为新克隆注册一个新的弹出窗口(因为您不希望它使用与原始弹出窗口相同的弹出窗口)
  5. 由于您的弹出框选项指定了一个 #popover-content id 作为内容,弹出框插件似乎 wrap/replace 该 ID 处的节点具有实际弹出框控件的结构。您现在将有许多元素使用相同的弹出窗口内容,因此您需要按照文档 https://github.com/sandywalker/webui-popover#default-options 中所述禁用缓存,以便能够为所有弹出窗口实例重复使用相同的内容。

这是您的代码的更新版本:

var $target = $('.click');
var popoverOptions = {
  url: '#popover-content',
  cache: false
};

$('.clone').on('click', function() {
  var $cln = $target.clone(false);
  $cln.appendTo($('#container'));
  $cln.webuiPopover(popoverOptions);
});

$target.webuiPopover(popoverOptions);
<script src="https://cdn.jsdelivr.net/jquery/1.11.3/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/jquery.webui-popover/1.2.1/jquery.webui-popover.min.js"></script>
<link href="https://cdn.jsdelivr.net/jquery.webui-popover/1.2.1/jquery.webui-popover.min.css" rel="stylesheet" />
<a class="clone" href="javascript:void(0)">clone</a>
<br>
<br>
<br>
<a class="click" href="javascript:void(0)">click1</a>
<div id="container"></div>
<div id="popover-content" style="display: none;">
  HI!
</div>