页面加载后运行Javascript

时间:2011-07-19 09:54:38

标签: c# jquery asp.net datatables startupscript

据我所知,这里有很多帖子,但我已尝试过每一个帖子,但没有一个有效!

我有一个使用visual studio 2010运行的aspx和aspx.cs页面。

在我的aspx页面上我有一张桌子

<table id="viewPendingTable" runat="server"></table>

在aspx.cs页面上,表中加载了数据。这很好,没问题。加载页面后,该表包含我需要的动态添加数据。

我正在使用jquery dataTables使用标准

来设置我的表格样式
$(document).ready(function () {
    $('#viewPendingTable').dataTable({
        "bJQueryUI": true,
    });
});

当我直接在html中创建带有虚拟信息的测试表时,数据表会根据需要正确显示。但是当我将jquery脚本应用于动态表时。什么都没发生。动态数据根据需要显示,但数据表(搜索功能,样式等)不存在。

现在我怀疑这是因为脚本在表填充数据之前运行。

这是我开始执行的任务,强制jquery / javascript在aspx.cs运行并且表已填充后运行。

但是我失败了...所以就像我认为我会发出警报('YAAY')一样;从c#侧使用已注册的启动脚本。但是没有可用的无效。

有人可以告诉我为什么这不起作用。

我尝试了多种不同的启动脚本方式!

我的aspx是:

<table id="viewPendingTable" runat="server"></table>

<script type="text/javascript" language="javascript" id="ShowTable">
<!--
    loadTable();
    function loadTable() {
        $(document).ready(function () {
            $('#viewPendingTable').dataTable({
                "bJQueryUI": true,
                "sPaginationType": "full_numbers"
            });
        });
        alert('ALEX');
        document.getElementById("table_id").width = "100%";
    }
//-->
</script>

我的aspx.cs是:

protected void Page_Load(object sender, EventArgs e)
{
    loadMyTable();
    ClientScriptManager a = null;
    a.RegisterStartupScript(GetType(), "anotherkey", "alert('ASDFASDFASDF');", true);
    a.RegisterStartupScript(GetType(), "anfgsdgsderkey", "alert('MOTHER');", false);
    a.RegisterStartupScript(this.GetType(), "AKey", "loadTable();", true);

    ClientScript.RegisterStartupScript(GetType(), "MyScript", "<script language=javascript>" + "alert('Hello ASP.NET'); }</script>");

    ScriptManager.RegisterStartupScript(this.Page, GetType(), "script", "alert('Success!');", true);

    Page.ClientScript.RegisterClientScriptBlock(GetType(), "script", "alert('AAA');", true);

    Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "script",
        "alert('a');" +
        "$(document).ready(function (){" +
            "$('#viewPendingTable').dataTable({" +
                "\"bJQueryUI\": true" +
                "\"sPaginationType\": \"full_numbers\"" +
            "});" +
        "}); alert('b'); document.getElementById('viewPendingTable').width = 100%", true);

}

我尝试了更多方法尝试在页面加载后运行javascript,但是他们在失败的情况下失败了。

有人请帮忙!

为什么我的简单javascript警报没有运行?

即使我让它们工作......通过在页面加载后执行jquery来正确设置数据表的样式???

谢谢你的时间

亚历

P.S。没有评论asp:gridView或asp:DataTable,因为那个EPICALLY失败了,我几天前就发布了一个问题而且没有人回复。如果你想看看 CLICK HERE

3 个答案:

答案 0 :(得分:4)

更改此行代码并尝试

"$('# " +   viewPendingTable.ClientID + "').dataTable({" +
你编写的document.read脚本中的

这是因为当页面在浏览器上呈现时,你可以获得表格控件的实际ID

修改 利用

RegisterStartupScript因为它会在</form>标记之前(<form>标记结束之前)在页面末尾发出JavaScript。

答案 1 :(得分:2)

您面临的最可能的问题是您的网页上不存在id="viewPendingTable"

通过在表上添加runat="server"属性,将更改ID,以便ASP.NET可以在回发时绑定它。

您需要在jQuery中使用表的ClientID属性:

viewPendingTable.ClientID

答案 2 :(得分:2)

首先,客户端代码始终在执行服务器端代码后运行。虽然客户端代码可以在浏览器中呈现html之前运行。所以这与此无关。

如果检查生成的html,您将看到asp.net将生成应用runat属性的元素的id。要解决此问题,请在表中添加一个类,并将js选择器更改为$(“。classname”)。

额外提示:使用像firebug这样的调试器,它允许您调试js代码,这样可以轻松解决这些问题:)