在我的代码中,我有以下事件处理程序
<xp:eventHandler event="onclick" submit="true"
refreshMode="partial" disableValidators="true"
refreshId="#{javascript:compositeData.refreshid}">
<xp:this.script><![CDATA[
alert('clicked');
]]></xp:this.script>
<xp:this.action><![CDATA[#{javascript:print("jkafkjsfjk");}]]></xp:this.action>
</xp:eventHandler>
[不幸的是,当CSJS代码正常工作并且弹出单击警报时,我从未在控制台中打印jkafkjsfjk
。
我知道不执行它的最常见原因与某些必填字段(等于null或空)有关。
但是,我已经注释掉了所有内容,但是无论如何都没有执行代码。
我该如何解决,这是什么原因?
提前感谢。
几件事...
[首先,如果您的CSJS返回false,则SSJS将永远不会运行(这在您希望用户确认时非常方便...)。我想您在这里应该没问题-但是为了安全起见,您可以返回true。...
第二,部分刷新,刷新ID和部分执行可能会执行您未期望的操作。因此,对于测试,我将完全刷新并跳过ID。
事件处理程序设置在哪种对象上?
我通常将这类事件处理程序用于链接或按钮,例如:
<xp:button value="Add zone" id="button2" styleClass="btn-xs btn-primary">
<xp:eventHandler event="onclick" submit="true" refreshMode="partial" refreshId="fields">
<xp:this.action><![CDATA[#{javascript:AssociationAdmin.createZone()}]]></xp:this.action>
</xp:eventHandler>
</xp:button>
并且这很好用:-)
这里是一个先确认的例子:
<xp:link escape="true" text="Delete" id="link5" styleClass="action" rendered="#{javascript:!AssociationAdmin.isCatchInfoInUse(row.getKey())}">
<xp:eventHandler event="onclick" submit="true" refreshMode="complete" id="eventHandler5">
<xp:this.action><![CDATA[#{javascript:AssociationAdmin.removeCatchInfo(row.key);}]]></xp:this.action>
<xp:this.script><![CDATA[return window.confirm("Are you sure you want to delete these fields: #{javascript:row.getName()}?\n\nDeletion cannot be undone!!")]]></xp:this.script>
</xp:eventHandler>
</xp:link>
希望这些示例可以帮助您:-)
/ John