plone/jquery—当表单作为弹出式覆盖打开时,是什么导致javascript无法工作?

plone/jquery—当表单作为弹出式覆盖打开时,是什么导致javascript无法工作?,jquery,plone,Jquery,Plone,我有一个灵巧的内容类型,包括行为plone.app.event.dx.behaviors.IEventBasic 在browserview页面中,我有一个表单,在单击链接时打开,使用我的资源文件夹中javascript文件中的jquery: jquery(function($){ .... $(".openCT").prepOverlay( { subtype: 'ajax', filter: '#content

我有一个灵巧的内容类型,包括行为plone.app.event.dx.behaviors.IEventBasic

在browserview页面中,我有一个表单,在单击链接时打开,使用我的资源文件夹中javascript文件中的jquery:

jquery(function($){

   ....
   $(".openCT").prepOverlay(
         {
             subtype: 'ajax',
             filter: '#content>*',
             formselector: '#content-core > form',
             noform: 'reload',
             closeselector: '[name="form.buttons.cancel"]',
         }
     );
    ....     
});
表单将打开,但与jquery/javascript相关的任何内容都不起作用。 特别是,当全天设置为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
任何人看到这个,请注意,这个答案是针对Plone 4.3.x的。在Plone 5+中,弹出窗口的处理方式不同

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

因此,您需要重新运行任何JS初始化代码以将事件附加到新的DOM元素。您可以通过向覆盖配置添加onLoad事件来完成此操作:

$(".openCT").prepOverlay({
    subtype: 'ajax',
    ...
    config: {
        onLoad: function () {
            // js code to attach events to new DOM elements
    }}
...
});
此事件在加载并显示覆盖后激发。因此,在DOM中可以使用新元素。“配置”中可能包含的项目记录在中。

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

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

因此,您需要重新运行任何JS初始化代码以将事件附加到新的DOM元素。您可以通过向覆盖配置添加onLoad事件来完成此操作:

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

此事件在加载并显示覆盖后激发。因此,在DOM中可以使用新元素。“配置”中可能包含的项目记录在。

启动浏览器中的Javascript控制台并查找错误消息。很可能是一些JS错误在到达代码之前中止了加载。不幸的是,控制台中没有显示错误消息。我在FireFox、Chromium和Web上尝试了这一点。启动浏览器中的Javascript控制台,查找错误消息。很可能是一些JS错误在到达代码之前中止了加载。不幸的是,控制台中没有显示错误消息。我在FireFox、Chromium和Web上试过了。很抱歉我反应太晚了。非常感谢。这确实解决了我自己的功能问题。我必须找到一种方法来附加IEventBasic拥有的jquery,但感谢您朝着正确的方向迈出的一步。我还有一个类似的问题,但我不确定问一个新问题是否合适。我在文件中定义了一个验证器(validator.SimpleFieldValidator),我在onLoad中放置的jQuery,例如将分钟字段中的值从0-59更改为0和30,当用户单击带有无效输入的submit按钮时会中断。所谓休息,我的意思是分钟范围回到0-59。不过验证器仍然可以工作。奇怪的是,当jquery按照预期进行验证时,单击字段而不是单击提交按钮并没有破坏jquery。很抱歉,我的响应太晚了。非常感谢。这确实解决了我自己的功能问题。我必须找到一种方法来附加IEventBasic拥有的jquery,但感谢您朝着正确的方向迈出的一步。我还有一个类似的问题,但我不确定问一个新问题是否合适。我在文件中定义了一个验证器(validator.SimpleFieldValidator),我在onLoad中放置的jQuery,例如将分钟字段中的值从0-59更改为0和30,当用户单击带有无效输入的submit按钮时会中断。所谓休息,我的意思是分钟范围回到0-59。不过验证器仍然可以工作。奇怪的是,当jquery按照预期进行验证时,单击字段而不是单击提交按钮并没有破坏jquery。