使用jquery detach()两次不能按预期工作

时间:2013-04-10 20:53:03

标签: jquery jquery-ui-dialog jquery-autocomplete detach

我的DOM中有一个自动完成文本框(使用jquery)。我有一个场景,我需要在单击按钮的对话框中显示此自动完成文本框。仅在对话框视图中自动填充内容,然后在关闭对话框时将自动完成文本框设置回DOM。这是样本:

$("#autocom-div button").click(function(){
    $("#autocom-div #autocomplete").detach().dialog({
        close: function(){
            $(this).removeClass('ui-dialog-content ui-widget-content').removeAttr('style');
            $('#autocom-div button').before(this);
        }
    });
});

jsfiddle链接相同:

http://jsfiddle.net/s24101984/EBduF/350/

问题:当我第二次点击按钮时

1 个答案:

答案 0 :(得分:1)

问题不在于detach(),而在于dialog()。您必须在创建另一个对话框之前销毁该对话框的现有实例。因为destroy方法也会移除div托管,所以你需要首先克隆它:

$("#autocom-div button").click(function()
{
    var parent = $("#autocom-div"),
        elm    = $("#autocomplete"),
        clone  = $("#autocomplete").clone();

    $("#autocomplete").detach().dialog({
         close: function(){
             parent.prepend(clone);
             $(this).dialog('destroy').remove();
         }
    });

});

jsfiddle