2011-01-25 73 views
0

我需要在UserControl中插入一些JavaScript代碼,我通過jQuery Ui Tabs從Ajax調用中加載。讓我來解釋......在jQuery Ui Tabs中動態加載UserControl中使用Javascript

這是我的看法(與jQuery加載)

<script type="text/javascript"> 
    $(document).ready(function() { 
     $("#tabs").tabs({ 
     cache: false, 
     }); 
     getContentTab (1); 
    }); 

    function getContentTab(index) { 
     var url='<%= Url.Content("~/Home/getUserControl") %>/' + index; 
     var targetDiv = "#tabs-" + index; 

     $.get(url,null, function(result) { 
      $(targetDiv).html(result); 
     }); 
    } 
</script> 

<div id="tabs"> 
    <ul> 
     <li><a href="#tabs-1" onclick="getContentTab(1);">Nunc tincidunt</a></li> 
     <li><a href="#tabs-2" onclick="getContentTab(2);">Proin dolor</a></li> 
     <li><a href="#tabs-3" onclick="getContentTab(3);">Aenean lacinia</a></li> 
    </ul> 
    <div id="tabs-1"> 
    </div> 
    <div id="tabs-2"> 
    </div> 
    <div id="tabs-3"> 
    </div> 
</div> 

隨着這些代碼行我叫Ajax的功能將內容加載到一個DIV。 這是從控制器的行動:

public ActionResult getUserControl(int num) 
    { 
     return PartialView("TestUC", num); 
    } 

這是用戶控件...

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %> 
Number... <span id="testSpan"><%=Model.ToString() %></span>!! 
<input type="button" value="Click me!!" onclick="message();" /> 
<script type="text/javascript"> 
function message(item) { 
    alert($("#testSpan").html()); 
} 
</script> 

的問題是,這個消息()函數返回始終爲1(而不是返回正確的號碼)。

我的問題是...我應該如何將腳本添加到我的用戶控件爲了讓我的代碼正確運行?

回答

0

我只是猜測在這裏。

我想你的問題是,當一個標籤被加載時,即使你打開另一個標籤,它仍然保留在DOM中(即如果#1是默認值,即使你點擊第二個標籤,它仍然會被加載) 。

如果發生這種情況,當您調用消息函數時,會有多個ID爲「testSpan」的元素,並且jQuery選擇器$(「#testSpan」)將返回第一個元素。

我想這只是一些測試代碼,但對於這種特殊情況,我會添加<%= Model.ToString()%>作爲javascript函數的參數。

同樣,我只是猜測jquery-ui tabs()函數的行爲。

問候

+0

這個腳本可能是一個解決方案,但我在不同的(更乾淨恕我直言)的方式解決。 現在,我清空前一個選項卡的內容,這樣ID始終是唯一的。謝謝! – Flea777 2011-01-26 12:42:46

0

嘗試添加這樣

<script type="text/javascript" defer="defer"> 
function message(item) { 
    alert($("#testSpan").html()); 
} 
</script>