Javascript Xpages数据表:如果链接具有特定的标签值,则单击链接上的事件

Javascript Xpages数据表:如果链接具有特定的标签值,则单击链接上的事件,javascript,datatable,xpages,alert,lotus-notes,Javascript,Datatable,Xpages,Alert,Lotus Notes,在我的Xpage上,我有一个数据表,在其中我从数组(arrayPerson)加载数据 在第一列中,我有一个链接字段(核心控件),从中我可以得到不同的名称 我试图解决的是: 如果名字是“Thomas”,我想链接到google.de 但是如果名字是“Katrin”,我想弹出一个警报窗口,里面有文本,例如警报(“无链接”)),没有指向谷歌的链接,只有警报 <xp:link escape="true" id="link1"> <xp:this.text><![CDATA[

在我的Xpage上,我有一个数据表,在其中我从数组(arrayPerson)加载数据

在第一列中,我有一个链接字段(核心控件),从中我可以得到不同的名称

我试图解决的是: 如果名字是“Thomas”,我想链接到google.de 但是如果名字是“Katrin”,我想弹出一个警报窗口,里面有文本,例如警报(“无链接”)),没有指向谷歌的链接,只有警报

<xp:link escape="true" id="link1">
<xp:this.text><![CDATA[#{javascript:arrayPerson[0]}]]>  </xp:this.text>
</xp:link>

这可能吗?

有两种选择

一种是使用事件面板。在客户端事件框中输入if语句。如果任何客户端代码的结果是布尔真值,则运行服务器端代码。否则服务器端代码不会运行。因此,返回true时,不要对“Thomas”发出警告,但对“Katrin”发出警告,然后返回false

另一个选项是计算链接的value属性。您将通过编写服务器端JavaScript进行计算,但结果需要是一个可以解析为客户端JavaScript的字符串,请参见下面的示例。这是一个很大的难题,但一旦你明白了这一点,除非你需要输出大量的CSJ,否则就不会太糟糕了

<xp:this.value>
<![CDATA[#{javascript:if (arrayPerson[0]=="Katrin") {
return "alert('No Link');";
}
</xp:this.value>

仅当您的条件(如arrayPerson[0]==“Thomas”为真)时,才将链接的
值设置为URL。否则返回一个空字符串(=单击链接不执行任何操作)

如果条件与arrayPerson[0]!=”相反,则使用客户端代码呈现
onclick
事件托马斯。仅当渲染条件为true时,此命令才会在单击警报框时执行CSJS代码:

<xp:link
    escape="true"
    text="#{javascript:arrayPerson[0]}"
    id="link1"
    value="#{javascript:arrayPerson[0] == 'Thomas' ? 'http://www.google.de' : ''}">
    <xp:eventHandler
        event="onclick"
        submit="false"
        rendered="#{javascript:arrayPerson[0] != 'Thomas'}"
        script="alert('No Link')">
    </xp:eventHandler>
</xp:link>


我尝试了你的2个选项,但当我点击Katrin链接时,浏览器试图打开链接。)对不起,我认为返回的内容必须是“javascript:alert('No Link');”才能作为客户端javascript运行。value属性返回锚定标记的href属性的内容,该属性最初不是CSJS,但可以运行CSJS。选项一是我首选的方法,因为您正在使用CSJS编辑器编写CSJS,所以很难出错。返回false或使用NoSubmission来阻止它运行部分刷新。