5

我试图从后面的 ASP.NET 代码中调用一个 jQuery 函数。

我不希望它被 jQuery click 事件触发;我想在我的控件后面的代码中触发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
 );
4

6 回答 6

3

首先,将您function a() {移出$(document).ready().

但是您可能仍然对执行顺序有疑问。

如果这是一个完整的回发,那么a()RegisterStartupScript另一个$(document).ready(). 如果它是来自 的部分回发UpdatePanel,只要在第一次加载页面时正确创建了对话框,它就应该可以工作。

于 2013-07-19T14:13:17.030 回答
1

不能从后面的代码中触发 JavaScript 函数。您可以在 html 页面上定义 JavaScript 函数并使用 Control.Attributes.Add 在服务器端绑定点击事件。您将需要服务器控制来绑定事件,您可以通过 put runat="server" 使 html 控制服务器可访问

Javascript

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

背后的代码

hightlight_show1.Attributes.Add("onclick", "YourFun();");
于 2013-07-19T14:10:14.817 回答
0

服务器端 (c#) 操作似乎很难影响客户端 (jQuery) 事件。您需要使用 ajax 从启动事件的服务器请求信息。

请记住,c# / ASP 代码在网络服务器上运行,它的工作只是根据请求将 HTML 发送到浏览器。之后,它的作用就基本完成了。JavaScript 和 jQuery 等由浏览器解释,但仅在文档已经离开服务器很久之后。有一些“方法”可以让 c# 在非常松散的意义上触发 jQuery 事件,但最终你仍然必须认识到客户端(浏览器)和 Web 服务器之间的区别。

于 2013-07-19T14:09:56.893 回答
0

function a()document.ready函数中声明。

Register.StartupScript 会将代码添加到 document.onload,您确定哪个事件正在触发(就绪或 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
     });
});
于 2013-07-19T14:14:02.237 回答
0

不确定这是否真的是您的问题,但在“您尝试过的代码”中,您的脚本标签声明中缺少右双引号 (")。

你写了:type="text/javascript

但从未关闭声明......这肯定会让原本可以工作的 JS 搞砸。

于 2013-07-19T14:17:58.127 回答
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# 和 VB 中的工作演示

于 2013-07-19T14:25:49.877 回答