簡體   English   中英

我的JavaScript有什么問題? (C#/ ASP.NET)

[英]What's wrong with my JavaScript? (C#/ASP.NET)

這是我的JavaScript:

<script type="text/javascript">
function onholdev(index) {
    var chk = document.getElementById('<%=grdCons.Rows[' + index + '].FindControl("chkHold").ClientID %>');
    var txt = document.getElementById('<%=grdCons.Rows[' + index + '].FindControl("txtReason").ClientID %>');


    if (chk.checked == true) {
        txt.disabled = false;
    }
    else {
        txt.disabled = true;
        txt.value = "";
    }
}
</script>

'index'變量來自我的GridView的RowDataBound事件,如下所示:

  CheckBox chkHold = ((CheckBox)e.Row.FindControl("chkHold"));
  chkHold.Attributes.Add("onchange", "onholdev(" + e.Row.RowIndex + ")");

但是,在函數的第一行(從var chk開始),“字符串文字中的字符太多”。 為什么是這樣?

您正在混合客戶端和服務器端腳本...您只是做不到。 這是在服務器端執行的:

grdCons.Rows[' + index + '].FindControl("chkHold").ClientID

但是,您在客戶端調用它並嘗試傳遞一個ID,這不是您可以做的,請查看呈現的JavaScript函數,這將更加清楚。 而是只使用表的ID,然后您可以通過這種方式找到控件,例如:

var row = document.getElementById("grdCons").rows[index];
var inputs = row.getElementsByTagName("input");
//then filter by ID match, class, whatever's easiest and set what you need here

這可能是因為ASP.NET引發錯誤,該錯誤寫在getElementById的客戶端調用中。 onholdev函數是在客戶端執行的,因此無法將index參數傳遞給在服務器端執行的ASP.NET。 嘗試這個:

<script type="text/javascript">
function onholdev(checkbox, textbox) {
    var chk = document.getElementById(checkbox);
    var txt = document.getElementById(textbox);

    if (chk.checked == true) {
        txt.disabled = false;
    }
    else {
        txt.disabled = true;
        txt.value = "";
    }
}
</script>

以此替換服務器-輔助代碼:

CheckBox chkHold = ((CheckBox)e.Row.FindControl("chkHold"));
chkHold.Attributes.Add("onchange", "onholdev('" + 
    e.Row.FindControl("chkHold").ClientID + "','" + 
    e.Row.FindControl("txtReason").ClientID + "')");

問題是您在' + index + '使用了單引號字符。 將其更改為雙qoutes,它應該可以工作。

暫無
暫無

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

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