[英]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.