我使用PrimeFaces p:menuitem
组件执行删除操作。为了添加确认步骤,我使用了onclick
事件,其中显示了JavaScript确认对话框。在我的代码下面:
<p:menuitem icon="fa fa-fw fa-remove"
title="#{message.global_remove}"
value="#{message.global_remove}"
actionListener="#{componentListMB.delete(cp.id)}"
onclick="return confirm('#{message.component_list_confirm_deletion}')"
update=":component_list" />
当用户确认删除时,不会触发操作,而是在URL的末尾添加#
。
为什么在p:commandButton
期间没有触发事件一切正常?
我正在使用:
答案 0 :(得分:5)
当用户确认删除时,不会触发操作,而是会在网址末尾添加
#
。
Primefaces实际上是将p:menuitem
呈现为a
HTML标记,使用元素的onclick
事件来执行自己的Ajax请求。 E.g。
onclick="PrimeFaces.ab({...});return false;"
请注意,他们在return false;
元素的末尾which prevents the default browser behaviour
添加了a
,因此网址中不会显示#
。
添加confirm
函数时,它位于onclick
元素的开头,如下所示:
onclick="return confirm('confirm?');PrimeFaces.ab({...});return false;"
如果您没有确认,则由于默认行为被阻止,因此网址中不会显示#
。如果您确认它将出现。但是,由于您首先调用return
语句,因此Ajax操作永远不会执行。
您可以按照以下方式更改p:menuitem
onclick
事件的预期行为:
onclick="if (!confirm('#{message.component_list_confirm_deletion}')) return false;"
为什么在
p:commandButton
期间没有触发事件一切正常?
Primefaces区别对待p:commandButton
。它包装用户的onclick
和Primefaces Ajax函数,将它们中的每一个放在一个单独的函数中,然后将它们发送到Primefaces#bcn
,它按顺序执行函数。返回false
的第一个停止处理剩余的函数。生成的HTML中的onclick
如下:
onclick="PrimeFaces.bcn(this, event, [function(event){return confirm('confirm?')},function(event){PrimeFaces.ab({...});return false;}]);"
答案 1 :(得分:2)
您可以使用<p:confirm>
内的<p:menuitem>
进行确认。
编辑:只需在确认()之前移除return
,所有内容也应按预期工作。
答案 2 :(得分:0)
您可以尝试将<p:menuitem>
actionListener委派给<p:commandButton>
。然后在<p:confirm>
内嵌套<p:commandButton>
以获取确认消息。然后通过onclick
的{{1}}属性触发您的命令按钮。
答案 3 :(得分:0)
使用confirm()而不返回不能解决问题。相反,即使取消确认对话框,它也会提交表单。我想知道在使用
之前是否有使用onclick事件的解决方法
您应在确认对话框中的取消按钮上重置值,否则您将在页面加载时获取新数据。
答案 4 :(得分:0)
使用p:confirmDialog:
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
UIApplicationState state = [application applicationState];
if (state == UIApplicationStateActive)
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"MyApp"
message:notification.alertBody
delegate:self cancelButtonTitle:@"OK"
otherButtonTitles:@"SNOOZE",@"DISMISS",nil];
alert.delegate = self;
[alert show];
[[UIApplication sharedApplication] cancelLocalNotification:notification];
}
}