仅在页面加载时执行Javascript,而不是在PostBack时执行(SharePoint)

4
我正在尝试在SharePoint网站上的自定义页面上,在页面加载时执行一些JavaScript(它会使用当前用户填充人员选择器)。问题是,代码也会在回发时执行,这不是我想要的,因为它会重置人员选择器的任何更改。
我尝试使用if(!IsPostBack),但没有成功。在那个点上,一切都出错了,显示:

SCRIPT5009: 'IsPostBack' is undefined.

我找不到任何在线帮助。有什么建议吗?谢谢。

IsPostBack 在服务器端代码中可用,只是澄清一下,您是否在 javascript 中使用它? - Arindam Nayak
可以。但是我无法使其工作。 - user3320324
我的意思是,由于该属性仅在服务器端代码中受支持,因此您无法在javascript中使用它,而应查看已发布的答案。如果那个答案不起作用,请告诉我,我会尝试发布答案。 - Arindam Nayak
由于它在SharePoint上,我无法访问codebehind。一位同事分享了一些代码,他们使用了检查文档引用者的代码。那个函数现在对我有用了。感谢您的帮助。 - user3320324
3个回答

6
你可以创建这样一个函数:
function IsPostBack() {
    var ret = '<%= Page.IsPostBack%>' == 'True';
    return ret;
}

是的,那很有效 - 太棒了!我已经花费了很长时间来寻找一种方法,使我的UpdatePanel内容在(初始内容显示/)页面加载后立即显示。这相当简单,但由于不断循环导致页面加载,UI会闪烁 - 但现在不再了!谢谢MrCADMan! :) - Zeek2

3

您可以尝试以下方法。使用JavaScript的pageLoad方法,并使用PageRequestManager对象的isInAsyncPostBack属性来确定是否为回发。请参考MSDN链接此处获取更多详细信息。

<script type="text/javascript" language="javascript">
  function pageLoad(sender, args) {
    if (!Sys.WebForms.PageRequestManager.getInstance().get_isInAsyncPostBack()) {

     // call you JavaScript function in here

    }
  }
</script>

通过这种方式,它会在页面加载和提交后运行。 - user3320324
你确定这个JS函数在代码中没有被其他地方引用吗? - Dennis R
当我在本地尝试时,它对我有效。如果它对你不起作用,那么你可能需要发布一些自定义页面代码和JS代码。 - Dennis R
我对这一切真的很新。在页面中定义IsPostBack对我有用。 - user3320324

3

IsPostBack 不是 JavaScript 变量,而是 .NET WebForms 变量,只能在服务器端使用,因此客户端会报错。那么该怎么办呢?我建议在控件的 HTML 中加入以下混合内容:

<% if(IsPostBack) { %> <!-- runs on server -->

<script type="text/javascript">
 alert('will only be printed to html if not postback');
</script>

<% } %> <!-- ends server if-block -->

谢谢。我错误地认为它是一个JavaScript变量,那就是根本问题。 - user3320324

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接