如何在xPage上使用CSJS获取提交的值?

时间:2016-08-18 16:01:05

标签: javascript xpages

我可以在onItemClick事件中使用SSJS点击弹出菜单项:

context.getSubmittedValue()

但是如何在相同的onItemClick事件中使用CSJS来点击项目?
这似乎没有帮助:

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中点击了哪个项目的信息

2 个答案:

答案 0 :(得分:1)

您可以使用每个basicLeafNode的onClick事件来确定在CSJS中点击的内容。

以下是如何使用basicLeafNode的onClick事件的示例。

如果您需要执行SSJS代码,可以在隐藏按钮上触发click事件,该按钮具有运行SSJS代码的事件处理程序。

请注意,当您将onClick事件添加到basicLeafNode时,它会覆盖onItemClick事件:Cannot get XPages toolbar onItemClick event to execute when basicLeafNode contains onClick event

Site { Id:1, PageId:1 }
PageBlock {Id:1, PageId:2 }
Page1 { Id: 1, SiteId: 1, BlockId: null}
Page2 { Id: 2, SiteId: null, BlockId: 1}

答案 1 :(得分:1)

正如您在评论中所写,您希望首先执行SSJS代码,然后才执行CSJS代码。不幸的是,eventHandler始终首先执行CSJS。

在服务器上运行代码后,在SSJS代码中使用view.postScript()在客户端执行代码。您的eventHandler将如下所示:

<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 + '");');