plone / jquery - 当一个表单作为弹出覆盖打开时,是什么导致javascript不起作用?

时间:2016-04-05 18:08:22

标签: jquery plone

我有一个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

1 个答案:

答案 0 :(得分:4)

任何关注此事的人,请注意此答案适用于Plone 4.3.x. Plone 5 +中的弹出窗口处理方式不同。

单击链接或按钮时,会将Ajax叠加层插入到DOM中。因此,新元素没有附加任何jQuery事件(除非jQuery事件添加了'live'机制,每次更改DOM时都会重新附加事件。)

因此,您需要重新运行任何JS初始化代码以将事件附加到新的DOM元素。您可以通过向叠加配置添加on​​Load事件来实现此目的:

$(".openCT").prepOverlay({
    subtype: 'ajax',
    ...
    config: {
        onLoad: function () {
            // js code to attach events to new DOM elements
    }}
...
});

加载并显示叠加层后会触发此事件。因此,DOM中可以使用新元素。 “config”中可能包含的项目记录在jQueryTools docs