当c#中的代码调用javascript函数时,document.getElementById()不起作用

时间:2013-06-06 08:51:23

标签: c# javascript code-behind

我有一个javascript函数,在单击链接按钮时在default.aspx中正常工作。 但是,当我从代码后面调用这个函数时,它无法工作。

以下是default.aspx中代码的一部分:

function loadAdditionalInfoDialog(qtyId)
{
    alert(qtyId);
    var qty = document.getElementById(qtyId).value;
    alert(qty);
}

单击按钮时,这是我的代码隐藏的一部分(default.aspx.cs):

protected void btnRedeemAll_Click(object sender, EventArgs e){
    TextBox txtQty = (TextBox)itm.FindControl("txtQty");

    ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "temp", "<script>loadAdditionalInfoDialog(" + txtQty.ClientID + ")</script>", false);
}

警报(qtyId)适用于双方并打印出相同的单词。 (默认页面和代码隐藏)。 但是后面的代码无法提醒(数量)。谁知道我的问题是什么?

注意到qtyId是default.aspx中转发器内的文本框ID。

5 个答案:

答案 0 :(得分:0)

可能你传的是错误的ClientID

使用java脚本调试器(例如FireBug)并检查var qty = document.getElementById(qtyId);是否不是null(可能是)。

还要看here

答案 1 :(得分:0)

你能在下面试试吗?

protected void btnRedeemAll_Click(object sender, EventArgs e){
ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "temp", "  <script>loadAdditionalInfoDialog('" + txtQty.ClientID + "')</script>", false);
}

似乎你错过了传递clientid的单引号。

答案 2 :(得分:0)

您是否遗漏了参数'" + txtQty.ClientID + "'

中的引号
protected void btnRedeemAll_Click(object sender, EventArgs e){
    ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "temp"," <script>loadAdditionalInfoDialog('" + txtQty.ClientID + "')</script>", false);

}

答案 3 :(得分:0)

试试:

Page.ClientScript.RegisterStartupScript(this.GetType(), "temp", "<script>loadAdditionalInfoDialog('" + txtQty.ClientID + "')</script>", false);

这是在初始页面呈现期间应该绑定的脚本的方法。

答案 4 :(得分:0)

我的猜测是问题是由你在按钮点击事件处理程序上创建控件txtQty引起的。

这是一个动态创建的控件,可能不存在于ASP.NET引擎生成的HTML中。

尝试使用页面上的控件以及您在设计视图中添加的控件,并检查是否出现相同的问题。

<强>更新 道歉。在按钮单击事件处理程序中,您正在尝试查找控件。你为什么这样做?控件是在应用程序的另一部分的某处创建的动态创建的控件吗?