1

我在 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>
                &#160;&#160;
                <xp:text escape="true" id="computedField2"
                    value="#{row.LastName}">
                </xp:text>
                <xp:br></xp:br>
            </xp:repeat>
        </xe:djContentPane>
    </xe:tooltipDialog>
</xp:view>
4

2 回答 2

1

我修好了它!问题是出现问题时会调用 XSP.error。因为我不想要任何丑陋的警报框,所以我将使用此代码重新定义该函数。XSP 消息(在我的情况下为错误)记录到控制台。

    <xp:scriptBlock id="scriptBlock1"
    value="XSP.error = function(err){
            console.error('XSP error : ' + err);
        };">
</xp:scriptBlock>
于 2012-04-20T09:08:09.987 回答
0

渡轮——你必须把它们结合起来吗?另一种方法是在链接旁边放置一个图标并将鼠标悬停添加到图标上(可能是一个小人物图标) - 然后您可以将鼠标悬停和单击而不是尝试组合。

另一种选择是将链接和 div(并排)放置在父级(表格或 div 或其他东西)内,并使用 CSS 将 div 放置在链接的顶部。然后将鼠标悬停在 DIV 上,然后它会刷新工具提示,使您的链接保持完整且可点击。

让我知道这是否有帮助:)

于 2012-04-18T20:55:31.170 回答