javascript中c#验证的gridview中的复选框

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

我有一个带有2个ItemTemplates的gridview- 复选框,文本框 我必须使用Javascript验证4 如果选中复选框且复选框中未写入数量!! 我必须通知客户我该怎么做? 复选框和文本框位于gridview的同一行中。 请把剧本给我 提前感谢。

如果您正在使用它,则可以轻松完成。 创建一个将“this”作为参数的函数,并在复选框“Click”上单击“event pass”将“this”传递给函数。然后使用jQuery的.prev()方法可以得到网格的“tr”行

 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.
  }
}

如果选中该复选框,文本框不能将“数量”作为文本?我不确定这是否是你的意思不,复选框和文本框是网格视图中同一行中的独立项模板…如果选中了文本框,文本应在复选框中明确键入抱歉,文本框中应键入确保复选框选中的文本听起来像
中的