【问题标题】:Unable to clone jQueryUI dialogs无法克隆 jQueryUI 对话框
【发布时间】:2011-06-24 21:18:35
【问题描述】:

我有一个用户正在添加和编辑书籍列表的页面。你可以移动它们,添加新书,编辑已经存在的书...

要添加或编辑每本书,会弹出一个对话框,其中包含一个带有多个输入字段的表单:标题、作者、流派等。我还有水印插件将默认文本放入每个字段。

在将每本书保存回主列表并关闭对话框之后,为了让表单为下一本书做好准备,我认为这会更容易,而不是迭代和重置这些字段中的每一个只需每次使用表单的克隆,然后在每次保存后丢弃克隆:

$( "#addEditBook" ).click(function() {
$("#bookForm").clone().removeAttr("id").attr("id", "clonedBookForm").insertAfter("#bookForm");
$( "#clonedBookForm" ).dialog( "open" );
return false;
});

在 FireBug 中,我可以看到 #clonedBookForm 正在创建。和它下面的#bookForm 是一样的。

但是下一行,.dialog( "open" ); 会抛出这个错误:

uncaught exception: cannot call methods on dialog prior to initialization; attempted to call method 'open'

注意:我知道

$( "#clonedBookForm" ).dialog({
autoOpen: false,
modal: true,
resizable: false,
draggable: false,
etc., etc.

...之所以有效,是因为它适用于原始 #bookForm。事件没有被克隆?

我很想解决这个问题,因为我认为扔掉的东西克隆会真正节省时间......

提前致谢!

【问题讨论】:

    标签: jquery jquery-ui clone


    【解决方案1】:

    您克隆的bookForm 对话框,在您初始化时包装在另一个容器中

    $( "#bookForm" ).dialog({
    autoOpen: false,
    modal: true,
    resizable: false,
    draggable: false,
    etc., etc.
    

    建设。然后你稍后克隆bookForm 你只克隆包装的内容,没有主包装器。这就是你没有成功的原因。尝试使用 jQuery 模板并从模板创建新对话框。

    【讨论】:

    • CoolEsh,非常感谢您抽出宝贵时间提供帮助。我想知道我是否可以打扰您 a) 说明您关于包装内容与主包装的观点。在 Firebug 中,我可以看到 #clonedBookForm 和 #bookForm 是相同的 - 子元素、数据和所有内容。 b) 你能分享一个关于 jQuery 模板的链接吗?我在谷歌上搜索,但一直在 JTML 上寻找东西,这听起来不像是一回事......
    • a) 让我们在这里看看我的简单示例:jsfiddle.net/SX5b6/1。如您所见,我添加了非常简单的对话框。但是如果你用萤火虫看它,我的 id div 嵌套在另一个没有 id 的 div 中,你无法处理它的参数;
    • b) 关于模板:我使用它们来填充系统对话框,这样我就不必每次在页面上需要对话框时都复制粘贴 html 代码。 jQuery.template( 'templateName', '<option value="${value}">${title}</option>' ); 允许保存模板,jQuery.tmpl( 'templateName', params ).appendTo( someDropdownElement ); 允许将参数传递给模板并将 html 附加到某个元素。请阅读 jQuery API 了解更多详细信息:api.jquery.com/?ns0=1&s=tmpl
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-06
    • 2017-11-07
    • 1970-01-01
    • 1970-01-01
    • 2020-05-01
    相关资源
    最近更新 更多