从代码后面触发javascript;按钮触发js代码,RegisterStartupScript没有

时间:2013-09-19 20:06:27

标签: javascript jquery asp.net code-behind

我有一个带有div的asp.net应用程序,触发弹出窗口(点击)。如果我的代码背后的代码发生了什么,我需要弹出窗口。

我想我可以向我的页面发送一个javascript代码块来点击div,但我似乎无法使它工作。这是弹出插件的jQuery:

$(function () {
   $('.c_popup').modalPopLite(
                { openButton: '#div_trigger', 
                  closeButton: '#close-btn' 
                });
});

一个简单的div触发它(通过单击div):

<div id="div_trigger">Trigger</div>

我可以通过页面上的按钮点击javascript中的div:

<input type="button" id="btn_show_error" value="Popup"
       onclick="document.getElementById('div_trigger').click();" />

有效。但是,当我尝试从我的代码背后向该页面发送完全相同的javascript块时,如下所示:

ClientScript.RegisterStartupScript(Page.GetType(), "error_click", 
       "<script>document.getElementById('div_trigger').click();</script>")

什么都没发生。我通过更改为一个简单的警告框来测试我的代码:

ClientScript.RegisterStartupScript(Page.GetType(), "error_click",
     "<script>alert('Hello World');</script>")

这很好用。所以我可以看到javascript从我的代码后面到达页面,并且当它来自页面本身的按钮时,同样的javascript块做了我想要的,但它不能从后面的代码中发挥作用。

任何想法都将不胜感激。我真的被卡住了。

编辑:两张海报回复说我在弹出控件绑定之前发布了我的javascript。即使有了我的帮助,我也不确定如何解决这个问题。我尝试在页面标题栏中创建此功能:

function TriggerDiv() {
    $(document).ready(function () {
        alert('success');     //alert just to check if the function is firing
        document.getElementById('div_trigger').click();
    });
}

并从我的代码后面调用它:

ClientScript.RegisterStartupScript(Page.GetType(), "error_click", 
    "<script>TriggerDiv();</script>")

警报触发,但点击事件没有 - 我认为我仍然没有按照正确的顺序做事。任何进一步的帮助将非常感激。

3 个答案:

答案 0 :(得分:2)

javascript执行时可能不存在该元素,或者至少您对modalPopLite的调用尚未执行。将您的代码包裹在$(document).ready

编辑:元素应该在执行时存在。 RegisterStartupScript将脚本添加到body的底部。但是,modalPopLite调用尚未执行,因此单击处理程序尚未附加。 $(document).ready仍应解决此问题。

答案 1 :(得分:1)

启动脚本放在表单末尾的页面中,因此它将在ready事件之前运行,因为在加载整个文档时会发生这种情况。点击被触发就好了,只是没有关注点击的处理程序。

只要弹出插件的脚本位于表单结尾之前(例如通常建议的;在头部),您就可以绑定另一个ready事件处理程序,并在之后触发弹出窗口已绑定:

ClientScript.RegisterStartupScript(Page.GetType(), "error_click", 
   "<script>$(function(){ document.getElementById('div_trigger').click(); });</script>");

您可能需要使用触发事件的jQuery方式来触发使用jQuery绑定的事件:

ClientScript.RegisterStartupScript(Page.GetType(), "error_click", 
   "<script>$(function(){ $('#div_trigger').click(); });</script>");

答案 2 :(得分:1)

<script>
    function SayHi()
{
   alert('hi');
}
</script>

ScriptManager.RegisterClientScriptBlock(this, typeof(Page), "TestFunction", "SayHi();", true);