我有一个dexterity内容类型,其中包含行为plone.app.event.dx.behaviors.IEventBasic。
在浏览器视图页面中,我有一个表单,在单击链接时打开,在资源文件夹的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设置为True时,显示小时和分钟将不会隐藏。有什么我需要包含,以便jquery / javascript可以在弹出覆盖中工作吗?
编辑: 我的表格是灵巧.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
答案 0 :(得分:4)
任何关注此事的人,请注意此答案适用于Plone 4.3.x. Plone 5 +中的弹出窗口处理方式不同。
单击链接或按钮时,会将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。
中