2013-08-05 63 views
0

我在Web用戶控件上有一些JavaScript,並在頁面上實例化該控件的兩個實例。該控件只是顯示一些幫助文本,並應切換到打開或關閉。Asp.Net Web用戶控件上的JQuery腳本多執行一次

document.ready函數按預期運行,因爲它運行兩次。然而,當我點擊任何一個控制腳本運行兩次,因此控制打開然後關閉。

如何確保腳本僅運行一次單擊的控件。

<div class="helpControlHolder"> 
    <div class="expandableHeading">Show (Hide) </div> 
    <div class="expandableContent commentsTable" > 
     <ul id="ulComments" runat="server"></ul> 
    </div> 
</div> 

<script type="text/javascript"> 
    function slideToggle(e, ui) { 
      debugger; 
      //find the right control to slideToggle 
      var ct = e.currentTarget; 
      var controlHolder = ct.parentNode; //up the dom one element 
      $(controlHolder).find(".expandableContent").slideToggle(500); //back down the dom to the element we want to animate 

    } 

    $(document).ready(function() { 
     //find the right control to hide 
     var pare = $('.helpControlHolder'); 
     pare.find(".expandableContent").hide(); 

     pare.find(".expandableHeading").click(function (e, ui) { 
      e.preventDefault(); 
      slideToggle(e, ui); 
     }); 
    }); 
</script> 
+1

我會建議你把JavaScript代碼在seprate文件 – Satpal

+0

由於'文件ready'被調用了兩次,你的'點擊()'處理程序綁定的兩倍,這是造成問題的 –

+0

你是使用類選擇器這意味着2元素在頁面上我會建議你讓容器在服務器上運行,給一個Id和在選擇器中使用'#<%= Div_Id.ClientID%>' –

回答

0
Try to change your javascript as follows: 

<script type="text/javascript"> 
    function slideToggle(e, ui) { 
      debugger; 
      //find the right control to slideToggle 
      var ct = e.currentTarget; 
      var controlHolder = ct.parentNode; //up the dom one element 
      $(controlHolder).find(".expandableContent").slideToggle(500); //back down the dom to the element we want to animate 

    } 

    $(document).ready(function() { 
     //find the right control to hide 
     var pare = $('.helpControlHolder'); 
     pare.find(".expandableContent").hide(); 


    }); 
    $(function(){ 
    $(".expandableHeading").click(function (e, ui) { 
      e.preventDefault(); 
      slideToggle(e, ui); 
    }); 
    }); 
</script> 


Hope it helps. 
+0

@Satpal - 把腳本分開文件本身並不能解決問題。 –

+0

@UmairP - 是的,這是正確的,這是問題,腳本是在每個控件,所以被添加兩次。但是如何解決這個問題呢? –

+0

爲了解決這個問題,我將腳本移到了一個單獨的文件中,然後我在主頁的「站點腳本」部分添加了一個條目,如下所示: –

0

是(按@UmairP指出的)劇本正在添加的問題兩次到該頁面。讓我感動的劇本到一個單獨的文件(helpControl.js),然後添加下面進入母版頁的網站腳本部分我用的是:

<%--Site Scripts--%> 
<asp:ScriptReference Path="~/Scripts/C/helpControl.js" /> 

這意味着它只能被添加一次,並且運行正常。

感謝答覆