One way for adding unsupported events to an XPage or a component is the trick from Keith. But this is limited to CSJS only. If you need to execute a server side event, you just need change the name of the event to a new HTML 5 event name which does not exist in the DDE.
Here is an example for the new onSearch event:
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:inputText id="inputTextSearch" type="search">
<xp:eventHandler event="onsearch" submit="true"
refreshMode="partial" refreshId="labelSearchFor">
<xp:this.action>
<![CDATA[#{javascript:print("onSearch");}]]>
</xp:this.action>
</xp:eventHandler>
</xp:inputText>
<xp:br />
<xp:br />
<xp:label id="labelSearchFor">
<xp:this.value>
<![CDATA[#{javascript:getComponent("inputTextSearch").value}]]>
</xp:this.value>
</xp:label>
</xp:view>
After entering a value and hitting enter…
… you can see on the server console that the event occurred:
This technique allows to add new events to the whole XPage, for example the onContextMenu event:
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:eventHandler event="oncontextmenu" submit="true"
refreshMode="norefresh">
<xp:this.action>
<![CDATA[#{javascript:print("onContextMenu");}]]>
</xp:this.action>
</xp:eventHandler>
</xp:view>
Every time if the user opens the context menu in the browser, the event is triggered and executed on the server:
The name of the event must be lowercased. A list of HTML 5 events can be found here: http://www.tutorialspoint.com/html5/html5_events.htm. Not all browsers support every HTML 5 event in the list.
P.S. Keep in mind that this article has been posted in the “Quick-n-Dirty” category.
Why would you call this a quick-n-dirty technique? This is how all event handlers work. The only difference is whether you get the pretty editor in Designer. If you look at how this or any other event handler gets rendered into the HTML results, it’s all the same.
I know. I have added this to my „Quick-n-Dirty“ section, because there are some developers who are thinking that this is a dirty solution: It is not supported by the IBM and an application could crash if running this code on Domino 12.6 or higher 😉
Dirty stays when Quick is long gone… but this dirty is beautiful!