首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在xPage上获得CSJS的提交值?

如何在xPage上获得CSJS的提交值?
EN

Stack Overflow用户
提问于 2016-08-18 16:01:04
回答 2查看 711关注 0票数 1

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

代码语言:javascript
复制
context.getSubmittedValue()

但是如何通过在同一个onItemClick事件中使用CSJS来单击项目呢?

这似乎没有任何帮助:

代码语言:javascript
复制
thisEvent.target.id

而这个却什么都不回:

代码语言:javascript
复制
thisEvent.target.innerHTML

这是我的xPage:

代码语言:javascript
复制
<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中点击的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-18 19:31:33

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

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

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

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

代码语言:javascript
复制
<?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>
票数 1
EN

Stack Overflow用户

发布于 2016-08-18 20:07:26

正如您在注释中所写的,您希望先执行SSJS代码,然后才执行CSJS代码。不幸的是,eventHandler总是首先执行CSJS。

在服务器上运行代码后,在SSJS代码中使用view.postScript()在客户端执行代码。您的eventHandler应该是这样的:

代码语言:javascript
复制
<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 + '");');

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39022798

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档