2010-05-26 2 views
4

У меня есть приложение, где я могу создавать динамические вкладки. и удалите опцию crossbar на вкладках. Когда я пытаюсь удалить вкладку, я получаю ошибку, напримерОшибка выполнения 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

ответ

3

Эта ошибка может возникнуть, если вы пытаетесь использовать объект null. В этом коде довольно много вещей может вернуть null: $find, findTabByText, getPageView, get_nextTab, get_previousTab и т. Д. Предлагаю вам все (прежде чем использовать). Таким образом вы найдете то, что null.

3

Вы не проверять какие-либо из этих вызовов функций, чтобы увидеть, если они на самом деле возвращения что-то. Один из них возвращает null, но ваш код этого не замечает и пытается использовать результат в следующем выражении.

Попробуйте в Firefox с Firebug, и вы, вероятно, получите сообщения об ошибках.

+1

Я проверил его. В firefox работает. Но не в IE. что мне теперь нужно делать в IE? – Philly

+1

Ну, введите некоторые операторы 'if', чтобы проверить каждое возвращаемое значение, и если кто-то возвращается« null », выведите предупреждение. Конечно, реальной проблемой будет код, который не находит элемент (или что-то еще), но вы не будете знать, где искать, пока не найдете вызов метода, который идет не так. – Pointy

0

$ find может вернуть значение null, если вы пытаетесь называть его слишком рано. Помните, что элементы управления ASP.NET AJAX создаются во время события Sys.Application.Init. Если вы попытаетесь получить к ним доступ раньше (например, в window.onload), то $ find() не будет работать.

+0

Я использую элементы управления telerik. Когда вы получаете предупреждение и видите, что я получаю сообщение, например tab, это нулевое значение – Philly

+0

, и какой из них я должен использовать сейчас? Как удалить вкладку? – Philly

+0

Вы должны использовать что-то вроде метода клиента ASP.NET AJAX pageLoad(), если вы хотите запускать скрипты, когда страница изначально загружена. Вы также можете использовать свойство OnClientLoad конкретного элемента управления для обработки собственного события загрузки (если оно есть). – lingvomir

Смежные вопросы