2010-05-26 90 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

相關問題