重复的jquery ui问题

Posted

技术标签:

【中文标题】重复的jquery ui问题【英文标题】:Duplicate jquery ui problem 【发布时间】:2011-05-07 16:53:56 【问题描述】:

我正在开发一个 Django 项目。但我的问题是在 JQuery 上。 我使用jquery.formset.jsJQuery插件在inline_formsets、formset_factories中动态添加表单。这很好用。它使用其他装饰标签(如 div、span、img..)复制第一行元素,并在表格底部添加新行。所以重复的行可以像原点一样出现。

我还在表单中使用jquery ui (datepicker, autocomplete..etc)。

复制会复制所有内容,甚至是日期选择器和自动完成附加的 html,因为插件会尽量不留下任何界面片段。当它克隆第一行时,所有内容都被克隆,甚至事件也被克隆。所以当我点击新出现的日期选择器输入时,日历事件在第一行的元素上起作用。

我正在努力寻找决定。到目前为止,这是我的想法..

    将 jquery ui(日期选择器和自动完成)声明为 live?喜欢

    $(".dates").live('...', function() $(this).datepicker(); )

    但我不确定应该为此处理哪个事件。我想处理新创建或附加的元素是不可能的。

    将脚本放在行内?在元素之后

    $("#id_birthday_1").datepicker();

    这似乎是最好的主意,但复制已经复制了额外的元素/html。所以它会重新渲染元素。

    我应该编辑 js 插件吗?就像绑定所有 jquery ui 的事件声明一样,除了渲染和附加和样式。那将是一个巨大的混乱。我不想这样搞砸了。每次如果我需要添加一个新的ui,我应该不断地编辑那个js

每一个想法都将不胜感激:)

【问题讨论】:

我打赌两个盒子的 ID 相同 其实没有.. js插件使用表单前缀创建新的id 【参考方案1】:

你的第一个想法是个好主意。

    给所有的日期选择器一个类来识别它们。 全部克隆。 然后,使用 jQuery each 函数将它们变成日期选择器:

.

$(".dates").each(function (i) 
    $(this).datepicker();

所以基本上,在激活日期选择器之前复制所有元素。 jQuery 的each 允许您一步激活整个元素列表。

编辑:如果您需要动态生成新的克隆,您可以将行的 HTML 存储在一个变量中。当您的用户添加一行时,您可以执行以下操作:

$(".date", $(rowHTML).appendTo($("#my-form-fields"))).datepicker();

将新行添加到表单中,然后初始化该行的日期选择器。

Edit2:和上面的代码等价于

$(rowHTML).appendTo($("#my-form-fields")).find(".date").datepicker();

【讨论】:

是的,但是克隆在运行时(动态)工作,我的意思是在文件准备好之后。添加底部允许使用其元素创建一个新行。 each 函数只能作用于默认元素,但不能作用于新创建(克隆)的元素 是的,我也遇到过。你已经解决了这个问题@jargalan 吗?【参考方案2】:

formset 插件可以在添加新表单时调用一个函数,您可以在那里初始化新添加的字段。该函数应采用单个参数row;它将被传递一个 jQuery 对象,包装刚刚添加的表单。

$('#myFormset1Table tbody tr').formset(
    added: function(row) 
       row.find(".date").datepicker(); 
    
);

【讨论】:

【参考方案3】:

您可以收听onSelect 甚至可能 $('.dates').focus(index) $($('.dates')[index]) //etc.

【讨论】:

以上是关于重复的jquery ui问题的主要内容,如果未能解决你的问题,请参考以下文章

jquery ui - 如何使用谷歌 CDN [重复]

在 Jquery UI 对话框中禁用关闭按钮 [重复]

在 UpdatePanel 中使用 JQuery UI datepicker [重复]

在jQuery UI datepicker上禁用一周中的特定日期[重复]

如何避免jQuery UI可拖动也触发点击事件[重复]

如何避免jQuery UI可拖动也触发点击事件[重复]