我有一个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函数?
发布于 2012-01-24 12:32:13
尝试如下:在FormServer.aspx中,就在上面,放置如下:
<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中)
发布于 2013-08-13 01:18:28
有一个更好的方法,取决于你的背景。我的要求是在我的InfoPath form Save按钮上拦截InfoPath处理程序,并进行一些在InfoPath中很难完成的额外验证。正如问题所述,不可能直接使用普通的jQuery $()函数,因为表单在这一点上没有加载。
有一个解决办法。SharePoint提供了一个JavaScript数组_spBodyOnLoadFunctionNames,可以将初始化函数添加到这个数组中。通过将一个函数推到数组上,它将在加载InfoPath表单之后调用:
$(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事件可以删除按钮的原始单击处理程序,并重新附加新的单击处理程序。
发布于 2013-10-29 22:02:35
最后,我使用了一个计时器来检查InfoPath表单上的标签是否显示在DOM中:
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....
}
}https://stackoverflow.com/questions/6861763
复制相似问题