2013-07-19 110 views
3

我想弄清楚如何正確編寫jQuery代碼,所以我可以從後面的ASP.NET代碼調用它。從代碼隱藏觸發jQuery功能

我不想讓它被jQuery點擊事件觸發,我想在我的控件後面的代碼中觸發jQuery函數--->「顯示對話框」。

$(document).ready(function() { 
    $("#LinkButton1").click(function(){ 
     $("#hightlight_show1").toggle(); 
    }); 

    var dialog1 = $("#Add").dialog({ 
      autoOpen: false, 
      width: 620, 
      height: 400 
    }); 

    // Move the dialog back into the <form> element 
    dialog1.parent().appendTo(jQuery("form:first")); 

    $("#BT_add").click(function() { 
     $("#Add").dialog("open"); 
     return false; 
}); 

我已經嘗試了一些像這樣的事情,但對我來說

$(document).ready(function() { 
    $("#LinkButton1").click(function() { 
     $("#hightlight_show1").toggle(); 
    }); 

    var dialog1 = $("#Add").dialog({ 
     autoOpen: false, 
     width: 620, 
     height: 400 
    }); 

    // Move the dialog back into the <form> element 
    dialog1.parent().appendTo(jQuery("form:first")); 

    function a() { 
     $("#Add").dialog("open"); 
     return false; 
    }; 

}); 

我在代碼中指定此背後使用Page.ClientScript.RegisterStartupScript()沒有奏效。

Page.ClientScript.RegisterStartupScript(
    this.GetType(), 
    "a", 
    "a();", 
    true 
); 

回答

2

第一,請將您的function a() {移出$(document).ready()

但是,您的執行順序可能仍然存在問題。

如果這是一個完整的回發,然後將a()呼叫與另一個$(document).ready()包裝在您的RegisterStartupScript中。如果是UpdatePanel的部分回傳,只要在第一次加載頁面時正確創建對話框,就應該可以工作。

+0

我試着搬出a()仍然沒有工作 – zzz

+0

您是否收到任何錯誤?檢查您的瀏覽器的JavaScript控制檯。 –

+0

我用了不同的方式來解決它,太多的時間花在jquery上。謝謝 – zzz

0

看起來好像服務器端(c#)操作難以影響客戶端(jQuery)事件。您需要使用ajax從服務器請求啓動事件的信息。請記住,c#/ ASP代碼在Web服務器上運行,它的工作就是根據請求將HTML發送到瀏覽器。之後,它的作用基本完成。 JavaScript和jQuery等由瀏覽器解釋,但僅在文檔已經離開服務器之後。有很多方法可以讓C#以非常鬆散的方式觸發jQuery事件,但最終你還是必須認識到客戶端(瀏覽器)和網絡服務器之間的區別。

0

無法從後面的代碼觸發JavaScript功能。您可以在html頁面上定義JavaScript函數,並使用Control.Attributes.Add綁定服務器端的click事件。您將需要服務器控件綁定事件,就可以使HTML控制服務器通過放RUNAT = 「服務器」

的Javascript

function YourFun(){ 
    $("#hightlight_show1").toggle(); 
} 

代碼訪問背後

hightlight_show1.Attributes.Add("onclick", "YourFun();"); 
0

您聲明function a()document.ready函數內。

Register.StartupScript將代碼添加到document.onload中,您確定哪個事件正在觸發(就緒或加載)?

在document.ready之外聲明它,它可能會工作。事情是這樣的:

<script type="text/javascript> 

function a() { 
    $("#Add").dialog("open"); 
    return false; 
}; 

$(document).ready(function() { 
    $("#LinkButton1").click(function(){ 
     $("#hightlight_show1").toggle(); 
    }); 

    // Move the dialog back into the <form> element 
    dialog1.parent().appendTo(jQuery("form:first")); 

    var dialog1 = $("#Add").dialog({ 
     autoOpen: false, 
     width: 620, 
     height: 400 
    }); 
}); 
+0

它沒有爲我工作,但感謝 – zzz

0

不知道這其實是你的問題,但在「你試過碼」你錯過了用雙引號(「)在你的腳本標記聲明。

您寫道:type="text/javascript

,但從來沒有關閉的聲明......這鐵定胡來否則工作JS。

0

做這個

標記

<script type="text/javascript"> 
    function ShowPopup(message) { 
     $(function() { 
      $("#dialog").html(message); 
      $("#dialog").dialog({ 
       title: "jQuery Dialog Popup", 
       buttons: { 
        Close: function() { 
         $(this).dialog('close'); 
        } 
       }, 
       modal: true 
      }); 
     }); 
    }; 
</script> 
<div id="dialog" style="display: none"> 
</div> 
<asp:Button ID="btnShowPopup" runat="server" Text="Show Popup" OnClick="btnShowPopup_Click" /> 

代碼背後

protected void btnShowPopup_Click(object sender, EventArgs e) 
{ 
    string message = "Message from server side"; 
    ClientScript.RegisterStartupScript(this.GetType(), "Popup", "ShowPopup('" + message + "');", true); 
} 

下載工作在C#中演示here和VB

+0

這可能是一個很好的解決方案,但它不適用於我的情況,也許我在其他地方搞砸了。 – zzz

+0

您正在使用哪種版本的J -query庫。如果你的東西在更新面板中,那麼你需要在最終請求函數中再次初始化對話框。 –