克隆后jQuery触发器不会触发

时间:2012-02-21 22:38:28

标签: javascript jquery triggers clone

我的代码中有一个div,当我克隆它时,不会直接触发事件。 这是代码;

<div id="draggable" onclick="alert(1);" class="ui-widget-content drag">
    <p>Drag me to my target</p>
</div>
<div id="here">
</div>

<script type="text/javascript">
    $("#draggable").clone().removeAttr("id").attr('id', 'draggable2').appendTo("#here");
    $("#draggable2").trigger('onclick');
</script>

当我点击克隆元素时,它会正常触发事件。

如果我更改脚本以让原始元素触发它也可以正常工作:

<script type="text/javascript">
    $("#draggable").clone().removeAttr("id").attr('id', 'draggable2').appendTo("#here");
    $("#draggable").trigger('onclick');
</script>

绑定功能也可以正常工作:

<script type="text/javascript">
    $("#draggable").clone().removeAttr("id").attr('id', 'draggable2').appendTo("#here");
    $("#draggable2").bind('click', function () { alert('2'); });
    $("#draggable2").trigger('click');
</script>

有没有人知道如何在克隆后直接触发克隆元素的“标准”onlick。

2 个答案:

答案 0 :(得分:20)

要克隆元素及其事件,必须将“true”作为第一个参数传递。要传递其子项的事件,您还必须传递“true”作为其第二个参数。

$myClone = $('#element').clone( true, true );

http://api.jquery.com/clone/

答案 1 :(得分:0)

从一开始就是一种脆弱的方法。你有一个克隆功能,然后你有一个克隆后执行的功能。为什么不在克隆之后调用该函数?创建一个可重用的函数,可以通过单击绑定调用,也可以直接从克隆函数调用。

如果绝对必要,您可以使用$(selector).click()来触发点击事件。

[编辑:根据Fauntleroy的回应,我不知道有必要传递'true',所以如果没有这个建议,我的方法也行不通。但是“这可能是一种糟糕的做法”的一般建议就是支持