重新初始化 JQuery 有 XPages 部分刷新更新 DOM

Re-Initialize JQuery have XPages Partial Refresh updates DOM

我有一个来自核心控件的选项卡式面板,里面是一个 <xp:inputText>,它有一个用于限制字段长度的 jQuery 的钩子。当我将页面更改为编辑模式时,如果屏幕上有此选项卡,效果会很好。但是,如果我不在该选项卡上并切换到编辑模式,然后切换到我想要的选项卡,则它不起作用。

我想这是因为 jQuery 启动时这些控件不存在。任何人都知道让 jQuery 刷新自身以获取初始加载时不存在的新 DOM 添加项的方法吗?

这是页面上方的代码:

<xp:scriptBlock id="scriptBlock1">
        <xp:this.value><![CDATA[$('input[maxlength]').maxlength({
            alwaysShow: true,
            threshold: 10,
            warningClass: "label label-success",
            limitReachedClass: "label label-danger"
        });]]></xp:this.value>
    </xp:scriptBlock>

字段是这样的:

<xp:inputText id="inputText2"
                        value="#{viewScope.vsWorkingContentAdd.description}">
                        <xp:this.attrs>
                            <xp:attr name="maxlength" loaded="true" value="75"></xp:attr>
                        </xp:this.attrs>
                    </xp:inputText>

同样,代码有效,因为它找到了已经存在的字段。这个问题是关于在 XPages 中,当您进行部分刷新并出现 <xp:inputText> 时,您如何让 jQuery 看到它?

您是正确的,具有通过 javascript 分配的属性和事件的对象在部分刷新期间重新加载后将需要它们 re-assigned。您可以将脚本块修改为如下所示:

function setValidation() {
    $('input[maxlength]').maxlength({
        alwaysShow: true,
        threshold: 10,
        warningClass: "label label-success",
        limitReachedClass: "label label-danger"
    });
 }

$(document).ready(function() {
    setValidation(); // On page load
    dojo.subscribe('partialrefresh-complete', function(method, form, refreshId, options) {
        setValidation(); // On partial refresh
    });
});