【问题标题】:Microsoft JScript runtime error: 'null' is null or not an objectMicrosoft JScript 运行时错误:“null”为空或不是对象
【发布时间】:2011-02-24 05:39:36
【问题描述】:

我有可以创建动态标签的应用程序。并删除选项卡上的交叉栏选项。当我试图删除标签时,我收到了类似的错误

Microsoft JScript 运行时错误:'null' 为 null 或不是对象并指向我的 Javascript 代码。

这是我的 JS 代码。

  <script type="text/javascript">
        /* <![CDATA[ */
        function deleteTab(tabText)
        {
            var tabStrip = $find("<%= RadTabStrip1.ClientID %>");
            var multiPage = $find("<%= RadMultiPage1.ClientID %>");
            var tab = tabStrip.findTabByText(tabText);
            var pageView = tab.get_pageView();

            var tabToSelect = tab.get_nextTab();
            if (!tabToSelect)
                tabToSelect = tab.get_previousTab();

            tabStrip.get_tabs().remove(tab);
            multiPage.get_pageViews().remove(pageView);

            if (tabToSelect)
                tabToSelect.set_selected(true);
        }
        /* ]]> */
</script>

在页面中

    if (!Page.IsPostBack)
    {
        RadTab tab = new RadTab();
        tab.Text = string.Format("New Page {0}", 1);
        RadTabStrip1.Tabs.Add(tab);

        RadPageView pageView = new RadPageView();
        pageView.Height = new Unit("50px");
        pageView.Width = new Unit("1300px");
        RadMultiPage1.PageViews.Add(pageView);

        BuildPageViewContents(pageView, RadTabStrip1.Tabs.Count);
        RadTabStrip1.SelectedIndex = 0;

    }

【问题讨论】:

  • 您不能简单地使用变量(如tabStrip)而不检查它们是否符合您的期望。

标签: c# javascript telerik


【解决方案1】:

如果您尝试使用 null 的对象,则可能会发生此错误。在该代码中,很多东西都可以返回 null: $find, findTabByText, getPageView, get_nextTab, get_previousTab 等。我建议您在使用它之前先提醒()一切。这样你就可以找到null

【讨论】:

    【解决方案2】:

    您没有检查任何这些函数调用来查看它们是否真的返回了一些东西。其中之一是返回null,但您的代码没有注意到这一点,并尝试在后续语句中使用结果。

    在带有 Firebug 的 Firefox 中试试这个,您可能会收到更好的错误消息。

    【讨论】:

    • 我查过了。在Firefox中它的工作。但不是在 IE 中。我现在应该怎么做才能在 IE 中工作?
    • 好吧,输入一些if 语句来检查每个返回值,如果有返回值,null 发出警报。当然,真正的问题是没有找到元素(或其他)的代码,但在找到出错的方法调用之前,您不知道该去哪里找。
    【解决方案3】:

    $find 如果您试图过早调用它,它可能会返回 null。请记住,ASP.NET AJAX 控件是在 Sys.Application.Init 事件期间创建的。如果您尝试更早地访问它们(例如在 window.onload 中),$find() 将不起作用。

    【讨论】:

    • 我使用 Telerik 控件。当发出警报并看到我收到类似标签为空的消息
    • 那么我现在应该使用哪一个?如何删除标签?
    • 如果您想在页面初始加载时运行脚本,您应该使用类似 ASP.NET AJAX pageLoad() 客户端方法。您还可以使用特定控件的 OnClientLoad 属性来处理自己的加载事件(如果有的话)。
    猜你喜欢
    • 2013-01-11
    • 1970-01-01
    • 2010-09-14
    • 2011-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-25
    相关资源
    最近更新 更多