You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

XPages技术问题:点击链接时如何在xp:this.script中获取其ID?

获取XPages中xp:link控件的客户端ID(解决$(this)返回undefined的问题)

我之前也踩过这个坑!在xp:link的xp:this.script里直接用$(this).attr('id')返回undefined,确实是因为这里的this根本不是指向客户端的链接DOM元素——它在服务器端脚本生成阶段的上下文里,指向的是服务器端的控件实例,不是浏览器里的那个<a>标签。

给你两种靠谱的解决方法:

方法一:直接输出控件的客户端ID

利用XPages的服务器端脚本,直接把控件的客户端ID注入到客户端脚本里:

<xp:link id="myLink" text="点击测试">
    <xp:this.script><![CDATA[
        // 直接通过服务器端脚本获取客户端ID
        var linkClientId = '#{javascript:this.getClientId()}';
        console.log("链接ID:", linkClientId);
        // 如果要用jQuery操作,直接用这个ID选择器
        var $link = $('#' + linkClientId);
        console.log("jQuery对象:", $link);
    ]]></xp:this.script>
</xp:link>

这里的#{javascript:this.getClientId()}会在服务器渲染页面时,替换成这个控件对应的客户端真实ID(XPages会自动添加命名空间前缀,比如view:_id1:myLink这类)。

方法二:通过事件对象获取DOM元素

如果需要在事件触发时动态获取元素,可以利用事件对象的currentTarget(或target)来拿到触发事件的链接元素:

<xp:link id="myLink" text="点击测试">
    <xp:this.script><![CDATA[
        function(e) {
            // e.currentTarget就是触发事件的链接DOM元素
            var linkId = e.currentTarget.id;
            console.log("链接ID:", linkId);
            // 转成jQuery对象也很方便
            var $link = $(e.currentTarget);
            console.log("jQuery对象:", $link);
        }
    ]]></xp:this.script>
</xp:link>

这个方法更灵活,尤其适合需要处理多个相似控件的场景,不用硬编码ID。

简单总结一下:XPages的xp:this.script里的this是服务器端上下文,不是客户端DOM,所以要么提前注入客户端ID,要么用事件对象来获取真实的DOM元素~

内容的提问来源于stack exchange,提问作者Malin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:02:59