如何在xPage上使用CSJS获得提交值
how to get submitted value with CSJS on xPage?
我可以在onItemClick事件中使用SSJS获得弹出菜单项点击:
context.getSubmittedValue()
但是我如何通过使用CSJS在同一个onItemClick事件获得项目点击?
这似乎没有帮助:
thisEvent.target.id
这个不返回任何东西:
thisEvent.target.innerHTML
下面是我的xPage:<xe:popupMenu id="popupMenu1">
<xe:this.treeNodes>
<xe:basicLeafNode label="menu item 1" submitValue="mi1"></xe:basicLeafNode>
<xe:basicLeafNode label="menu item 2" submitValue="mi2"></xe:basicLeafNode>
</xe:this.treeNodes>
<xp:eventHandler event="onItemClick" submit="true"
refreshMode="complete">
<xe:this.action><![CDATA[#{javascript:print(context.getSubmittedValue());}]]></xe:this.action>
<xe:this.script><![CDATA[alert(thisEvent.target.innerHTML);]]></xe:this.script>
</xp:eventHandler>
</xe:popupMenu>
我需要得到任何信息,这将有助于我确定哪个项目被点击在CSJS
你可以使用每个basicLeafNode的onClick事件来确定在CSJS中点击了什么。
下面是一个如何使用basicLeafNode的onClick事件的示例。
如果你需要执行SSJS代码,你可以触发一个隐藏按钮的点击事件,该按钮有一个事件处理程序来运行你的SSJS代码。
注意,当你将onClick事件添加到basicLeafNode时,它会覆盖onItemClick事件:当basicLeafNode包含onClick事件时,无法让XPages工具栏onItemClick事件执行
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" xmlns:xe="http://www.ibm.com/xsp/coreex">
<xp:button value="Label" id="button1">
<xp:eventHandler event="onclick" submit="false">
<xp:this.script><![CDATA[
XSP.openMenu(thisEvent,#{javascript:getComponent('popupMenu1').getMenuCtor()});
]]></xp:this.script>
</xp:eventHandler>
</xp:button>
<xe:popupMenu id="popupMenu1">
<xe:this.treeNodes>
<xe:basicLeafNode label="menu item 1" submitValue="mi1">
<xe:this.onClick><![CDATA[document.getElementById("#{id:mi1Event}").click();]]></xe:this.onClick>
</xe:basicLeafNode>
<xe:basicLeafNode label="menu item 2" submitValue="mi2">
<xe:this.onClick><![CDATA[document.getElementById("#{id:mi2Event}").click();]]></xe:this.onClick>
</xe:basicLeafNode>
</xe:this.treeNodes>
<xp:eventHandler event="onItemClick" submit="true" refreshMode="complete">
<xe:this.action>
<![CDATA[#{javascript:
print("onItemClick event running"); // Will not run!
}]]></xe:this.action>
</xp:eventHandler>
</xe:popupMenu>
<xp:button value="_mi1" id="mi1Event" style="display:none;">
<xp:eventHandler event="onclick" submit="true" refreshMode="partial" immediate="false" onComplete="console.log('onComplete of mi1 running');" refreshId="popupMenu1">
<xp:this.action><![CDATA[#{javascript:print("ssjs code for mi1 running");}]]></xp:this.action>
</xp:eventHandler>
</xp:button>
<xp:button value="_mi2" id="mi2Event" style="display:none;">
<xp:eventHandler event="onclick" submit="true" refreshMode="partial" immediate="false" onComplete="alert('onComplete of mi2 running');" refreshId="popupMenu1">
<xp:this.action><![CDATA[#{javascript:print("ssjs code for mi2 running");}]]></xp:this.action>
</xp:eventHandler>
</xp:button>
</xp:view>
正如您在评论中所写的,您希望首先执行SSJS代码,然后才执行CSJS代码。不幸的是,eventHandler总是先执行CSJS。
在SSJS代码中使用view.postScript()
在服务器端运行代码后在客户端执行代码。你的eventandler应该是这样的:
<xp:eventHandler
event="onItemClick"
submit="true"
refreshMode="complete">
<xe:this.action><![CDATA[#{javascript:
var value = context.getSubmittedValue();
print(value);
view.postScript('alert("' + value + '");');
}]]></xe:this.action>
</xp:eventHandler>
你可以这样在客户端调用函数,并使用选择的值作为参数:view.postScript('yourClientSideFunction("' + value + '");');
相关文章:
- Javascript生成的表单未提交
- 将输入字段中的文本提交到我的数据库,同时将其添加到我的列表中
- HTML表单提交时未执行外部函数
- 在POST中将html表作为csv提交
- 我应该使用Ng提交还是点击表格
- 我想使用模态通过php文件发送邮件,并且我希望在提交关闭后关闭pop
- 提交后保留下拉选择的值
- 键入最后一位数字后自动提交
- 阻止表单元素提交
- JS表单提交"无法使用Chrome数据保护程序加载此页面.尝试重新加载页面.调试信息:POST CISmtuK
- Jquery提交表单而不刷新
- 将图像上传ajax与表单提交ajax相结合
- Jquery表单验证插件-如果选中复选框,如何在提交时执行某些操作
- 自定义表单验证和提交
- 带有验证和隐藏字段值的提交按钮
- 如何在 API 调用后和 if 语句中启用提交按钮
- Jquery函数在错误的时间提交
- Javascript无法处理表单提交
- 提交按钮,该按钮位于使用 Excel VBA 的 Javascript 中
- 如何在xPage上使用CSJS获得提交值