【问题标题】:javascript not firing when asp.net user control loads当 asp.net 用户控件加载时,javascript 不会触发
【发布时间】:2011-03-16 15:47:58
【问题描述】:

当 ASP.net 用户控制到 aspx 页面时,我试图触发 Javascript 调用。
该网站允许用户将用户控件添加到页面(类似于将小部件等添加到类似 google 小部件的页面)。但是当添加控件时,javascript不会触发,只有刷新页面才会触发javascript。如果下次访问该网站并且控件仍然存在,则 JavaScript 也会触发。

是否需要使用 RegisterClientScript 方法在控件加载或 OnPreRender 事件上注册调用 (setAutoTimer())。

在用户控件中,我在 ascx 文件的开头有这个:

<script language="javascript" type="text/javascript">
    $(document).ready(function () {
        if ($("#alarmList").length) {
            setAutoTimer();
            getData();
       }
    });

    function setAutoTimer() {
        setInterval(getData, 10000);
    }

    function getData() {
        $.ajax({
            type: "POST",
            url: "Service.asmx/getListData
            data: "{'inverterid': '" + "1'}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (msg) {
                AjaxSucceeded(msg);
            },
            error: AjaxFailed
        });
    }

    function AjaxSucceeded(result) {
        $("#alarmList").empty();

        $("#alarmsListTemplate").tmpl(result.d)
        .appendTo("#alarmList");
    }

    function AjaxFailed(result) {
        alert(result.status + ' ' + result.statusText);
    }
</script>

【问题讨论】:

    标签: jquery asp.net onload


    【解决方案1】:

    $(document).ready(function () {});仅在发生完整回发后(重新加载 DOM 时)才会运行。我假设您正在通过另一个 AJAX 方法添加控件(在这种情况下 document.ready 不会触发。您可以使用 AJAX 框架事件 pageLoad(sender, args) 将在回调和回发后触发。您可以像这样使用它所以..

    function pageLoad(sender, args) {
            if (args.get_isPartialLoad()) {
                setAutoTimer();
                getData();
            }
        }
    

    【讨论】:

    • 感谢您的提示;我认为这有所帮助。
    • 这对我来说非常有用,但我希望 javascript 在回调之前和之后都能正常工作,所以我删除了“if (args.get_isPartialLoad())”,它就像一个魅力。谢谢,@bleeeah!
    【解决方案2】:

    您可以从将小部件添加到页面的 javascript 中调用该方法。

    例如

    function AjaxSucceeded(result) {
        $("#alarmList").empty();
    
        $("#alarmsListTemplate").tmpl(result.d)
        .appendTo("#alarmList");
    
        setAutoTimer();
    }
    

    【讨论】:

      猜你喜欢
      • 2011-12-17
      • 1970-01-01
      • 2012-04-20
      • 2012-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-15
      相关资源
      最近更新 更多