2010-01-14 81 views
1

我有這樣的內聯腳本,它在編輯和顯示div之間切換。如果它在UpdatePanel中,它需要兩次點擊才能工作。如果我刪除UpdatePanel,只需單擊一下即可正常工作。UpdatePanel和Javascript

<a href="#" onclick="edit(event,'ctl00_CPH1_ctl00_win1')">Edit</a> 

任何人都可以幫忙嗎?

感謝

編輯: 編輯功能:

function edit(e, id) { 
    var editdiv = $('#' + id).find('.edit'); 
    var cntdiv = $('#' + id).find('.content'); 

    if (editdiv.css('visibility') == 'hidden') { 
     editdiv.css('visibility') == 'visible' 
     cntdiv.css('visibility') == 'hidden' 
     cntdiv.hide(); 
     editbox.show() 
    } 
    else { 
     editdiv.css('visibility') == 'hidden' 
     cntdiv.css('visibility') == 'visible' 
     cntbox.show(); 
     editbox.hide() 
    } 

    stopEventBubble(e); // Code to cancel event bubbling; 
} 
+0

你如何將編輯功能添加到頁面? – Chris 2010-01-14 16:02:07

回答

0

試試這個:

<a href="#" onclick="edit(event,'ctl00_CPH1_ctl00_win1'); return false;">Edit</a> 

編輯
作爲Chrissaid: 如果您注射的功能當y點擊編輯鏈接,第一次點擊編輯鏈接時,該功能將不存在。

你可以做的是添加功能的<script>標籤內的標記的<head>部分:

<head> 
    <script> 
    function edit(event, id) { 
     // Your code here 
    } 
    </script> 
</head> 

或單獨的.js文件。

+0

試過這個,但並沒有解決問題。它總是第一次需要兩次點擊,後續點擊很好。 – 2010-01-14 14:16:57

1

您是否使用ScriptManager註冊編輯功能?

protected void Page_Load(object sender, EventArgs e) 
{ 
    string jsEdit = @"function edit(event, id) {}"; 
    ScriptManager.RegisterClientScriptBlock(this, GetType(), "editFunction", jsEdit); 
} 

如果你的代碼是在外部文件,您可以在使用ScriptManager或的ScriptManagerProxy在ASPX你的頁面進行註冊:

<ScriptManager runat="server" id="ScriptManager1"> 
    <Scripts> 
     <asp:ScriptReference path="~/js/edit.js" /> 
    </Scripts> 
</asp:ScriptManager> 

編輯: 好了,我知道是什麼現在的問題。你並沒有設置CSS的可見性開始。因此,無論您需要設置CSS的可見性,也可以修改你的編輯功能將遵循以下邏輯:

function edit(e, id) { 
    var editdiv = $('#' + id).find('.edit'); 
    var cntdiv = $('#' + id).find('.content'); 
    //I reversed it to look for visible instead of hidden. The main problem with this approach and your other approach is that the original value is inherited. 
    if (editdiv.css('visibility') == 'visible') { 
     editdiv.css('visibility') == 'hidden' 
     cntdiv.css('visibility') == 'visible' 
     cntbox.show(); 
     editbox.hide() 
    } 
    else { 
     editdiv.css('visibility') == 'visible' 
     cntdiv.css('visibility') == 'hidden' 
     cntdiv.hide(); 
     editbox.show() 
    } 

    stopEventBubble(e); // Code to cancel event bubbling; 
} 

另一種選擇會要求你設置你下面的「編輯」和「內容」的div。

<div id="edit" style="visibility:hidden"> ... </div> 
<div id="content" style="visibility:visible"> ... </div> 

如果您需要進一步的幫助,我需要看到有關的UpdatePanel,編輯和內容你的aspx代碼。

+0

試過了。放置在UpdatePanel中,而不是運氣。 – 2010-01-14 16:25:19

+0

這不應該在UpdatePanel中。說明的代碼應該在Page_Load函數中。 – Chris 2010-01-14 16:29:31

+0

現在試過了。現在它失去了屬性值:alert($('#'+ id).css('visibility'));返回繼承而不是可見的,因爲我設置它。此外,我有他們在用戶控制,看起來像頁面上通過ScriptManager.RegisterClientScriptBlock方法註冊的Javascript雜亂無章。我無法調用外部.js文件 – 2010-01-14 17:48:53