0

我有一个 xPage,在其上添加了一个按钮。在此按钮上,单击时会执行一些服务器端脚本。

我想要的是每当用户单击菜单中的链接时,都会执行此代码。因此,我在链接元素上创建了以下代码。

 <xp:link loaded="true" escape="true" id="lnkTab"
                value="#{javascript:rootNode.getFrame();}">
                <xp:this.text><![CDATA[#{javascript://return rootNode.getLabel();
return rootNode.getLabel();}]]></xp:this.text>
                <xp:eventHandler event="onclick" submit="true"
                    refreshMode="complete">
                    <xp:this.action><![CDATA[#{javascript:sessionScope.selectedPage = rootNode;}]]></xp:this.action>
                    <xp:this.script><![CDATA[
var currentPage = "#{javascript: return this.getParent().getValue();}";
var currentPageLocation = window.location.href;
var lastSlash = currentPageLocation.lastIndexOf("/");

var page = currentPageLocation.substring(lastSlash+1,currentPageLocation.length);
if(page == "UserProfile.xsp" && currentPage != "UserProfile.xsp"){
    if(isProfileChanged()){
        debugger;
        var retValue = confirm("U heeft wijzigingen niet opgeslagen.\nWilt u deze alsnog opslaan?");
        if(retValue){
            sendRedirectSignal("#{javascript: rootNode.getFrame();}","#{id:txtRedirectSignal}","#{id:btnProfileSave}");
            thisEvent.preventDefault();
            thisEvent.stopPropagation();        

            sendRedirectSignal("#{javascript: rootNode.getFrame();}","#{id:txtRedirectSignal}","#{id:btnProfileSave}");
            return false;

    }
}}]]></xp:this.script>

                </xp:eventHandler>
            </xp:link>

sendRedirectSignal 的代码如下

function sendRedirectSignal(strPage,redirectId,btnId){
    var hidRedirect = dojo.byId(redirectId)
    var btnProfile = dojo.byId(btnId);
    if(hidRedirect!=null && btnProfile != null){
        console.log(btnProfile);
        hidRedirect.value = strPage;
        console.log(btnProfile.click());
    }

}

如您所见,代码使用 dojo 检索按钮并发出 click 事件。由于某种原因,这根本行不通。没有在按钮上执行事件处理程序。当我在 firebug 中执行 btn 时,代码正在完美执行。有人可以帮助解决这个问题吗?为什么代码没有执行,我怎样才能让它工作。

4

2 回答 2

4

这是我对以下问题的重复回答:我可以在数据表的(链接)列中使用 onclick 事件设置范围变量吗?

在我之后重复:客户端总是优先于服务器端:-)

xp:link 控件的 value 属性导致根本不执行服务器端事件。单击链接时,它只是对相关资源执行 HTTP GET。

因此,如果您删除 value 属性,则应该触发您的 onclick 服务器端事件。

于 2013-04-10T15:41:24.003 回答
0

你可以简化一下。为什么将代码放在按钮中以使链接中的代码单击该按钮?两个行动方案:

  • 删除按钮(如果您不需要它,否则)并将代码放在链接中
  • 如果您也需要按钮:将按钮中的代码移动到 SSJS 函数中,然后从链接和按钮调用该函数。xp:link 也可以执行 SSJS
于 2013-04-11T15:33:08.407 回答