我在 xp:link 上使用 onclick 事件时遇到问题,鼠标悬停会弹出一个工具提示对话框,该对话框执行部分刷新以获取其内容。每当用户想要单击链接时,工具提示可能已经弹出并加载其内容。因为链接会重定向到另一个页面,所以内容窗格中的部分刷新事件正在被切断。这几乎每次都会导致错误“xhr cancelled”(您可以在浏览器的控制台中看到它,例如 Firebug)。
我已经尝试了几件事,比如在重定向到另一个页面之前尝试 .cancel() 内容窗格,但它不起作用可能是因为它在 tooltipDialog 中,所以我无法处理它。
下面是代码示例,您可以通过将其放入 Xpages 扩展库演示 nsf(填充数据)内的新 xpage 中来测试它。只需将链接悬停在工具提示完成加载其内容之前,单击该链接。
<?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:this.data>
<xp:dominoView var="view1" viewName="AllContacts"></xp:dominoView>
</xp:this.data>
<xp:br></xp:br>
<xp:br></xp:br>
<xp:link escape="true" text="Hover me" id="link1" style="margin-left:50px;"
value="/Core_DojoLayout.xsp">
<xp:this.onmouseover><![CDATA[tooltipTimerId = setTimeout ( "XSP.openTooltipDialog('#{id:tooltipDialog1}','#{id:link1}');", 500 );
]]></xp:this.onmouseover>
<xp:this.onmouseout><![CDATA[if (tooltipTimerId){
clearTimeout (tooltipTimerId);
}]]></xp:this.onmouseout>
</xp:link>
<xp:br></xp:br>
<xp:br></xp:br>
<xe:tooltipDialog id="tooltipDialog1">
<xe:djContentPane id="djContentPane1" refreshOnShow="false"
partialRefresh="true" preload="true">
<xp:repeat id="repeat1" rows="1000" value="#{view1}"
var="row">
<xp:text escape="true" id="computedField1"
value="#{row.FirstName}">
</xp:text>
  
<xp:text escape="true" id="computedField2"
value="#{row.LastName}">
</xp:text>
<xp:br></xp:br>
</xp:repeat>
</xe:djContentPane>
</xe:tooltipDialog>
</xp:view>