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