C# 禁用/启用GridViewRow中的文本框
我在GridView中有一个复选框和一个文本框(对于每一行),我希望能够编写一些javascript,根据复选框的状态(选中或未选中)启用和禁用文本框。我想我必须给JS行索引。这可能吗?如果您已经准备好使用jquery,那么可以通过以下方式轻松完成:C# 禁用/启用GridViewRow中的文本框,c#,javascript,asp.net,C#,Javascript,Asp.net,我在GridView中有一个复选框和一个文本框(对于每一行),我希望能够编写一些javascript,根据复选框的状态(选中或未选中)启用和禁用文本框。我想我必须给JS行索引。这可能吗?如果您已经准备好使用jquery,那么可以通过以下方式轻松完成: $(document).ready(function() { $('.grid tr').each(function() { var r = $(this); var c = r.find('.check');
$(document).ready(function() {
$('.grid tr').each(function() {
var r = $(this);
var c = r.find('.check');
var t = r.find('.text');
var f = function(c1, t1) { return function() {
if (c1.attr('checked')) {
t1.removeAttr('disabled');
}
else {
t1.attr('disabled', 'disabled');
}
};
};
c.click(f(c, t)); // attach click event handler
f(c, t); // set initial state
});
});
上面的脚本假设gridview表用grid
css类修饰,每个文本框和复选框分别用check
和text
css类修饰。是的,这是绝对可能的
要实现这一点,您需要执行以下操作:
示例:-
函数ManageControlEnableding(sourceCheckBoxId,affectingControlId)
{
var sourceCheckBox=document.getElementById(sourceCheckBoxId);
var affectingControl=document.getElementById(affectingControlId);
var shouldEnable=false;
if(sourceCheckBox&&affectingControl)
{
shoulEnable=sourceCheckBox.checked
if(shouldEnable)
affectingControl.disabled = false;
else
affectingControl.disabled = true;
}
}
示例:-
CheckBox checkSource;
TextBox textAffecting;
checkSource = e.Row.FindControl("cbSource") as CheckBox;
textAffecting = e.Row.FindControl("tbAffecting") as TextBox;
if(checkSource != null)
{
textAffecting.Enabled = checkSource.Checked;
}
checkSource.Attributes.Add("onclick", "ManageControlEnabling('" + checkSource.ClientID + "', '" + textAffecting.ClientID + "', true);");
请看看这是否有帮助
谢谢。谢谢你的回复,我通过回发解决了这个问题-这不是最好的方法,但由于时间限制,这是合乎逻辑的选择。谢谢你的帮助:)很遗憾,它不起作用-rowdatabound部分起作用(它添加属性,文本框根据复选框状态禁用/启用),但当我单击复选框时,它从不启用文本框-即使我去掉所有的if并让它启用文本框。我唯一要添加的是禁用asp.net页面上的视图状态验证。因为您正在修改页面中控件的状态,视图状态验证将抛出错误。此类错误在但是,禁用视图状态验证可以防止这种情况,并使JavaScript有机会在客户端修改html控件,同时迫使服务器端不要对此大惊小怪。