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

Javascript 如何在xPage上使用CSJS获取提交的值?,javascript,xpages,Javascript,Xpages,我可以在onItemClick事件中使用SSJS单击弹出菜单项: context.getSubmittedValue() 但如何在同一个onItemClick事件中使用CSJS单击项目? 这似乎没有什么帮助: thisEvent.target.id 而这个不会返回任何东西: thisEvent.target.innerHTML 这是我的xPage: 我需要获得帮助我识别在CSJS中单击了哪个项目的任何信息您可以使用每个BasiclefNode的onClick事件来确定在CSJS中单

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

context.getSubmittedValue()
但如何在同一个onItemClick事件中使用CSJS单击项目?
这似乎没有什么帮助:

thisEvent.target.id
而这个不会返回任何东西:

thisEvent.target.innerHTML
这是我的xPage:



我需要获得帮助我识别在CSJS中单击了哪个项目的任何信息

您可以使用每个BasiclefNode的onClick事件来确定在CSJS中单击了什么

下面是一个如何使用basicLeafNode的onClick事件的示例

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

请注意,将onClick事件添加到basicLeafNode时,会覆盖onItemClick事件:


正如您在评论中所写,您希望先执行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+”);')

问题是我需要先单击服务器端代码。然后根据单击的项目,我需要在eventHandler onComplete事件中刷新表单上的相应项目。所以这里我需要CSJS来获取元素clickedI更新了我的答案,使用BasicLeafNode的onClick来执行SSJS代码谢谢Knut。。我知道view.postscript。。它确实有效。但我将使用下面的jthomas解决方案。
<?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>
<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>