plone/jquery - 当表单作为弹出式覆盖打开时,是什么导致 javascript 不起作用?
plone/jquery - When a form is opened as a popup overlay, what is causing javascript to not work?
我有一个敏捷内容类型,其中包括行为 plone.app.event.dx.behaviors.IEventBasic。
在浏览器视图页面中,我有一个在单击 link 时打开的表单,使用资源文件夹中 javascript 文件中的 jquery:
jquery(function($){
....
$(".openCT").prepOverlay(
{
subtype: 'ajax',
filter: '#content>*',
formselector: '#content-core > form',
noform: 'reload',
closeselector: '[name="form.buttons.cancel"]',
}
);
....
});
表单打开,但 jquery/javascript 相关的任何内容都不起作用。
特别是 whole_day 不起作用,因为当 whole_day 设置为 True 时,显示小时和分钟的 "time components" 不会隐藏。是否需要包含一些内容,以便 jquery/javascript 可以在弹出窗口覆盖中工作?
编辑:
我的表格是 dexterity.AddForm:
class Add(dexterity.AddForm):
grok.name('my.product.tevent')
def updateWidgets(self):
super(Add,self).updateWidgets()
if 'a_param' in self.request.form.keys():
#set default value of start date, which is a tuple built from data obtained from a_param
self.widgets['IEventBasic.start'].value = (a_year,a_month,a_day,an_hour,a_min,a_timezone)
#start-> hour,min are 0,0 / end -> hour, min are 23,59
任何正在看这个的人,请注意这个答案是针对 Plone 4 的。3.x。弹出窗口在 Plone 5+ 中的处理方式不同。
单击 link 或按钮时,Ajax 叠加层将插入到 DOM 中。因此,新元素没有任何 jQuery 事件附加到它们(除非 jQuery 事件添加了 'live' 机制,每次 DOM 更改时重新附加事件)。
因此,您需要重新运行 任何 JS 初始化代码以将事件附加到新的 DOM 元素。您可以通过向覆盖配置添加一个 onLoad 事件来做到这一点:
$(".openCT").prepOverlay({
subtype: 'ajax',
...
config: {
onLoad: function () {
// js code to attach events to new DOM elements
}}
...
});
加载并显示叠加层后将触发此事件。因此,新元素在 DOM 中可用。 "config" 中可能包含的项目记录在 jQueryTools docs.
中
我有一个敏捷内容类型,其中包括行为 plone.app.event.dx.behaviors.IEventBasic。
在浏览器视图页面中,我有一个在单击 link 时打开的表单,使用资源文件夹中 javascript 文件中的 jquery:
jquery(function($){
....
$(".openCT").prepOverlay(
{
subtype: 'ajax',
filter: '#content>*',
formselector: '#content-core > form',
noform: 'reload',
closeselector: '[name="form.buttons.cancel"]',
}
);
....
});
表单打开,但 jquery/javascript 相关的任何内容都不起作用。 特别是 whole_day 不起作用,因为当 whole_day 设置为 True 时,显示小时和分钟的 "time components" 不会隐藏。是否需要包含一些内容,以便 jquery/javascript 可以在弹出窗口覆盖中工作?
编辑: 我的表格是 dexterity.AddForm:
class Add(dexterity.AddForm):
grok.name('my.product.tevent')
def updateWidgets(self):
super(Add,self).updateWidgets()
if 'a_param' in self.request.form.keys():
#set default value of start date, which is a tuple built from data obtained from a_param
self.widgets['IEventBasic.start'].value = (a_year,a_month,a_day,an_hour,a_min,a_timezone)
#start-> hour,min are 0,0 / end -> hour, min are 23,59
任何正在看这个的人,请注意这个答案是针对 Plone 4 的。3.x。弹出窗口在 Plone 5+ 中的处理方式不同。
单击 link 或按钮时,Ajax 叠加层将插入到 DOM 中。因此,新元素没有任何 jQuery 事件附加到它们(除非 jQuery 事件添加了 'live' 机制,每次 DOM 更改时重新附加事件)。
因此,您需要重新运行 任何 JS 初始化代码以将事件附加到新的 DOM 元素。您可以通过向覆盖配置添加一个 onLoad 事件来做到这一点:
$(".openCT").prepOverlay({
subtype: 'ajax',
...
config: {
onLoad: function () {
// js code to attach events to new DOM elements
}}
...
});
加载并显示叠加层后将触发此事件。因此,新元素在 DOM 中可用。 "config" 中可能包含的项目记录在 jQueryTools docs.
中