簡體   English   中英

從C#中的背后代碼調用javascript函數時,document.getElementById()無法正常工作

[英]document.getElementById() not working when call javascript function from code behind in c#

我有一個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);
}

alert(qtyId)對雙方都有效,並打印出相同的單詞。 (默認頁面和后面的代碼)。 但是后面的代碼無法警告(數量)。 有人知道我有什么問題嗎?

請注意,qtyId是default.aspx中轉發器內的文本框ID。

可能您傳遞了錯誤的ClientID

使用Java腳本調試器(例如FireBug)並檢查var qty = document.getElementById(qtyId); 不為null (可能為null )。

在這里也看看

您可以在下面嘗試嗎?

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

似乎您缺少有關正在傳遞的clientid的單引號。

您是否遺漏了引號'" + txtQty.ClientID + "'的引號

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

}

試試看:

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

這是用於在初始頁面呈現期間綁定的腳本的方法。

我的猜測是問題是由您在按鈕單擊事件處理程序上創建控件txtQty引起的。

這是一個動態創建的控件,在ASP.NET引擎生成的HTML中可能不存在。

嘗試使用頁面上和您在設計視圖中添加的控件,並檢查是否遇到相同的問題。

更新:道歉。 在按鈕單擊事件處理程序中,您試圖找到控件。 你為什么要這么做? 該控件是在應用程序另一部分的某個位置創建的動態創建的控件嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM