javascript中c#验证的gridview中的复选框
我有一个带有2个ItemTemplates的gridview- 复选框,文本框 我必须使用Javascript验证4 如果选中复选框且复选框中未写入数量!! 我必须通知客户我该怎么做? 复选框和文本框位于gridview的同一行中。 请把剧本给我 提前感谢。如果您正在使用它,则可以轻松完成。 创建一个将“this”作为参数的函数,并在复选框“Click”上单击“event pass”将“this”传递给函数。然后使用jQuery的.prev()方法可以得到网格的“tr”行javascript中c#验证的gridview中的复选框,c#,javascript,gridview,C#,Javascript,Gridview,我有一个带有2个ItemTemplates的gridview- 复选框,文本框 我必须使用Javascript验证4 如果选中复选框且复选框中未写入数量!! 我必须通知客户我该怎么做? 复选框和文本框位于gridview的同一行中。 请把剧本给我 提前感谢。如果您正在使用它,则可以轻松完成。 创建一个将“this”作为参数的函数,并在复选框“Click”上单击“event pass”将“this”传递给函数。然后使用jQuery的.prev()方法可以得到网格的“tr”行 var trCont
var trContainer = $(this).prev("tr")
一旦你有了just do(使用)
//如果行中只有一个文本框
var txtBox = $(trContainer).find("input");
//如果有多个文本框
//将一些伪css类添加到此文本框中,例如txtValidateClass
var txtBox = $(trContainer).find(".txtValidateClass");
现在,一旦你有了这个文本框,只需检查
if($(txtBox).val().trim() == ""){
//Show error
}else{
//Continue
}
希望这对您有所帮助。这个问题很老了,但为了防止其他人需要一个只适用于JavaScript的解决方案,这里是如何解决的 1.C#零件(在
页面加载中
方法)
在Page\u Load
中,我们需要添加一个小技巧:
foreach(GridViewRow row in YourGridViewControlID.Rows)
{
if (row.RowType == DataControlRowType.DataRow )
{
((CheckBox) row.FindControl("YourCheckBoxID")).Attributes.Add("onchange", "javascript:ShowErrorMessage(" + (row.RowIndex ) + ");");
}
}
这样,我们就在GridView
的每个复选框的OnChange
事件上添加了JavaScript函数调用。我们无法通过HTML
实现的特殊之处在于,我们正在传递JavaScript函数中每个函数的行索引,这是我们以后需要的
2.HTML部分的一些重要注释
确保复选框
控件和文本框
控件,但更重要的是GridView
控件都具有静态id,方法是使用clientMode=“static”
,如下所示:
<asp:CheckBox ID="YourCheckBoxID" runat="server" ClientIDMode="Static"/>
<asp:TextBox ID="YourTextBoxID" TextMode="SingleLine" runat="server" ClientIDMode="Static" />
3.Javascript部分
然后在JavaScript文件/代码中:
function ShowErrorMessage(Row) {
// Get current "active" row of the GridView.
var GridView = document.getElementById('YourGridViewControlID');
var currentGridViewRow = GridView.rows[Row + 1];
// Get the two controls of our interest.
var rowTextBox = currentGridViewRow.cells[2].getElementsByTagName("input")[0];
var rowCheckbox = currentGridViewRow.cells[0].getElementsByTagName("input")[0];
// If the clicked checkbox is unchecked.
if( rowCheckbox.checked && rowTextBox.value === '') {
// Empty textbox therefore show error message.
return;
}
// Optionally hide the error message here.
}
4.上述实现的一些注意事项
- 请注意,在JavaScript代码中,在以下行:
var currentGridViewRow=GridView.rows[Row+1]代码>
[Row+1]
对于执行此操作非常重要,不应更改
- 最后:
以下几行:
var rowTextBox = currentGridViewRow.cells[2].getElementsByTagName("input")[0];
var rowCheckbox = currentGridViewRow.cells[0].getElementsByTagName("input")[0];
.cells[2]
和.cells[0]
可能与您不同,因此您必须在[]
中选择正确的数字
通常,这将是从0
开始计数的GridView
的列号
因此,如果您的复选框
位于GridView的第一列,则需要.cells[0]
如果您的TextBox
位于GridView
的第二列,那么您需要.cells[1]
(在我上面的例子中,TextBox
位于我的GridView
的第三列,因此,我使用了.cells[2]
)
5.一小部分
上面是一段代码,问题所有者描述了该问题
但我认为,在这种情况下,在文本框发生更改时隐藏错误消息也是一个好主意。这是当用户选中复选框并且文本框为空时,获取一条错误消息,然后在文本框中键入一些内容,我们应该隐藏错误消息
简而言之,这里是对上述注释的补充(为简单起见,我删除了其他代码,但如果您想保留整个功能,则应保留这两个代码):
以下是C#修改:
foreach(GridViewRow row in YourGridViewControlID.Rows)
{
if (row.RowType == DataControlRowType.DataRow )
{
((TextBox) row.FindControl("YourTextBoxID")).Attributes.Add("onkeyup", "javascript:HideErrorMessage(" + (row.RowIndex ) + ");");
((TextBox) row.FindControl("YourTextBoxID")).Attributes.Add("onblur", "javascript:HideErrorMessage(" + (row.RowIndex ) + ");");
}
}
function HideErrorMessage(Row) {
// Get current "active" row of the GridView.
var GridView = document.getElementById('YourGridViewControlID');
var currentGridViewRow = GridView.rows[Row + 1];
// Get the two controls of our interest.
var rowTextBox = currentGridViewRow.cells[2].getElementsByTagName("input")[0];
var rowCheckbox = currentGridViewRow.cells[0].getElementsByTagName("input")[0];
// If the clicked checkbox is unchecked.
if( rowCheckbox.checked && rowTextBox.value !== '') {
// Hide the error message here.
}
}
从这里可以看出,他还添加了onblur
事件,以及这一事件与onkeyup
的组合,我们确保代码将在所有情况下执行
以下是JavaScript修改:
foreach(GridViewRow row in YourGridViewControlID.Rows)
{
if (row.RowType == DataControlRowType.DataRow )
{
((TextBox) row.FindControl("YourTextBoxID")).Attributes.Add("onkeyup", "javascript:HideErrorMessage(" + (row.RowIndex ) + ");");
((TextBox) row.FindControl("YourTextBoxID")).Attributes.Add("onblur", "javascript:HideErrorMessage(" + (row.RowIndex ) + ");");
}
}
function HideErrorMessage(Row) {
// Get current "active" row of the GridView.
var GridView = document.getElementById('YourGridViewControlID');
var currentGridViewRow = GridView.rows[Row + 1];
// Get the two controls of our interest.
var rowTextBox = currentGridViewRow.cells[2].getElementsByTagName("input")[0];
var rowCheckbox = currentGridViewRow.cells[0].getElementsByTagName("input")[0];
// If the clicked checkbox is unchecked.
if( rowCheckbox.checked && rowTextBox.value !== '') {
// Hide the error message here.
}
}
如果选中该复选框,文本框不能将“数量”作为文本?我不确定这是否是你的意思不,复选框和文本框是网格视图中同一行中的独立项模板…如果选中了文本框,文本应在复选框中明确键入抱歉,文本框中应键入确保复选框选中的文本听起来像
中的。