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

Dav*_*edy 2 jquery xpages

我有一个来自核心控件的标签面板,里面<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>
Run Code Online (Sandbox Code Playgroud)

该领域是这样的:

<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>
Run Code Online (Sandbox Code Playgroud)

同样,代码工作,因为它找到已存在的字段.这个问题是关于在XPages中进行部分刷新和<xp:inputText>出现时,如何让jQuery看到它?

Gar*_*bis 6

您是正确的,具有通过javascript分配的属性和事件的对象将在部分刷新期间重新加载后重新分配.您可以修改脚本块,使其如下所示:

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
    });
});
Run Code Online (Sandbox Code Playgroud)