首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery .ready()用于infopath表单?

jQuery .ready()用于infopath表单?
EN

Stack Overflow用户
提问于 2011-07-28 15:41:52
回答 7查看 10.9K关注 0票数 3

我有一个infopath表单,我想通过jQuery修改它。唯一的问题是它在页面DOM加载后加载,所以jQuery的标准$(document).ready(handler);在这里不能工作。我的问题是,是否有任何方法可以提取某种类型的$(infopath).ready(handler);,或者有一种方法可以等待infopath表单完成加载,而不只是使用标准的setTimeout()

编辑1:因此您有更多信息,jQuery在内容编辑器Web部件(CEWP)中,Infopath表单在Infopath form Viewer部件中。

我知道在infopath中使用jQuery或javascript并不是一个标准的实践,不幸的是,在这种情况下它是必要的,因为infopath重复选项控件的功能不理想,这一点在这个问题中有进一步的讨论。

编辑2:从我所知道的情况来看,我很可能错了,sharepoint有一个名为core.js的js文件,它似乎具有通过AJAX将信息处理表单加载到页面中的功能。有没有办法在远程javascript文件完成执行后设置一个jQuery函数?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2012-01-24 12:32:13

尝试如下:在FormServer.aspx中,就在上面,放置如下:

代码语言:javascript
复制
<script type="text/javascript">
    _InfoPath.OnLoad2 = function() {
        _InfoPath.OnLoad();
        //Here I will put my custom javascript code, which will be invoked after loading InfoPath form
    }
    window.onload = _InfoPath.OnLoad2;
</script>

我也在这里回答:如何检查是否加载了InfoPath表单(在javascript中)

票数 3
EN

Stack Overflow用户

发布于 2013-08-13 01:18:28

有一个更好的方法,取决于你的背景。我的要求是在我的InfoPath form Save按钮上拦截InfoPath处理程序,并进行一些在InfoPath中很难完成的额外验证。正如问题所述,不可能直接使用普通的jQuery $()函数,因为表单在这一点上没有加载。

有一个解决办法。SharePoint提供了一个JavaScript数组_spBodyOnLoadFunctionNames,可以将初始化函数添加到这个数组中。通过将一个函数推到数组上,它将在加载InfoPath表单之后调用:

代码语言:javascript
复制
$(function(){
    if (window.location.pathname.match(/Item\/(new|edit)ifs\.aspx/i)){
        _spBodyOnLoadFunctionNames.push('CustomInfoPathInit');
    }
});

function CustomInfoPathInit(){
    $(document).on('focusin', 'input[value="Save"]', function(event){
        $(this).attr('onclick', null); // remove standard handler
        $(this).off('click').on('click', function(){
            alert('click');
        });
        return (Button.OnClick(this, event)); // original click handler
    });
}

我之所以使用$(document).on('focusin', function(event){...,是因为表单中的任何回发(例如,当表单显示向服务器发送数据时.)将导致表单的刷新,任何绑定处理程序都将被删除。使用jQuery $(document).on('focusin',...)方法解决了这个问题,使用focusin事件可以删除按钮的原始单击处理程序,并重新附加新的单击处理程序。

票数 3
EN

Stack Overflow用户

发布于 2013-10-29 22:02:35

最后,我使用了一个计时器来检查InfoPath表单上的标签是否显示在DOM中:

代码语言:javascript
复制
var InfoPathCheck;

$(document).ready(function(){
    InfoPathCheck = setInterval(function() {  //Wait for InfoPath to finish loading
        HasInfoPathLoaded();
    }, 200);
});

function HasInfoPathLoaded() {
    var testDiv = $('h4 span:contains("Photo")').html();
    if (testDiv) {
        clearInterval(InfoPathCheck);
        // Do stuff with the InfoPath form here....
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6861763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档