2010-05-26 112 views
4

我有我可以创建动态选项卡的应用程序。并在选项卡上删除交叉栏选项。当我试图删除标签时出现错误,如Microsoft JScript运行时错误:'null'为空或不是对象

Microsoft JScript运行时错误:'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; 

    } 
+1

你不能简单地使用变量(比如'tabStrip')而不检查它们是否你期望它们是。 – Tomalak 2010-05-26 14:55:14

回答

3

如果您尝试使用的对象是null,则会发生此错误。在那个代码中,很多东西可以返回null$find, findTabByText, getPageView, get_nextTab, get_previousTab等。我建议你在使用它之前提醒()所有东西。这样你会发现什么是null

3

你不检查任何这些函数调用,看看他们是否实际上是返回的东西。其中之一是返回null,但您的代码不会注意到并尝试在后续语句中使用结果。

用Firefox试试这个与Firebug,你可能会得到更好的错误信息。

+1

我查过了。在Firefox中它的工作。但不在IE中。我现在应该怎么做才能在IE中工作? – Philly 2010-05-26 15:00:45

+1

好吧,放入一些'if'语句来检查每个返回值,并且如果返回'null'则会发出警报。当然,真正的问题将是没有找到元素(或其他)的代码,但是直到您发现方法调用出错时,您才会知道去哪里寻找。 – Pointy 2010-05-26 15:11:19

0

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

+0

我可以使用telerik控件。当出警报,看到我得到的消息像选项卡为空 – Philly 2010-05-26 15:39:28

+0

,我现在应该使用哪一个?如何删除标签? – Philly 2010-05-26 16:33:55

+0

如果要在页面初始加载时运行脚本,则应该使用类似ASP.NET AJAX pageLoad()客户端方法的东西。您也可以使用特定控件的OnClientLoad属性来处理它自己的加载事件(如果有)。 – lingvomir 2010-05-27 13:48:17

相关问题