我正在尝试更改网站部分功能。 目前,我有一个在我的表之外的验证按钮。只要用户点击该按钮,就会发生验证。
但是,我正在改变它,以便删除Validate按钮,并将功能移动到位于表内的Link Button。
以下是我的代码:
<table width="100%" cellpadding="4">
<tr>
<td valign="top">
//something else here
</td>
<td valign="top" align="right">
<asp:GridView ID="myGridView" runat="server" OnRowDataBound="myGridView_RowDataBound">
<Columns>
<asp:TemplateField HeaderText="Column 1">
<ItemTemplate>
// some control
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Column 2">
<ItemTemplate>
// some control
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Column 3">
<ItemTemplate>
// some control
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Column 4">
<ItemTemplate>
<asp:LinkButton ID="lbValidate" runat="server" Text="Validate" OnClientClick="return MyValidation__Submit(this.form)" CausesValidation="true" OnClick="btnValidate_Click"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</td>
</tr>
</table>
<div style="margin:10px 0px 10px 0px;">
<asp:Button ID="btnValidate" runat="server" Text="Validate" OnClientClick="return MyValidation__Submit(this.form)" CommandArgument="Save" CausesValidation="true" OnClick="btnValidate_Click" />
</div>
以下是进行验证的JavaScript块示例:
<script type="text/javascript">
function MyValidation__Submit(formName) {
alert("Test :" + formName);
// do validations
var joForm = document.getElementById(formName.id);
for (var i = 0; i < joForm.elements.length; i++) {
// do something
}
return true;
}
</script>
单击“验证”按钮但在LinkButton上没有时,这非常有效。
为了测试它,我必须放alert("Test :" + formName);
行。每当我触发Validate按钮时,系统警报返回一个字符串值“[object HTMLFormElement]”,我认为这是正常的,因为它按照我想要的方式运行。但是,当我尝试触发驻留在表中的Validate LinkButton时,系统警报返回“undefined”,使我的整个验证代码无用。
有人可以指出我在这里缺少什么吗?我猜它与控件的层次结构有关,因为这是唯一改变的。
谢谢!
修改
这是我能走的最远,但我仍然无法进入表格。
这个返回HTMLDivElement
。
<asp:LinkButton ID="lbValidate" runat="server" Text="Validate" OnClientClick="return MyValidation__Submit(this.parentNode.parentNode.parentNode.parentNode.parentNode)" CausesValidation="true" OnClick="btnValidate_Click"></asp:LinkButton>
是的,你看对了。它有5 .parentNode
。
答案 0 :(得分:0)
我的ASP知识有点简陋,但我相信这是因为当您使用“this.form”作为按钮时,“this”的范围是文档对象。但是当用于LinkButton时,“this”的范围是GridView。如果您要移动触发器项目,也许最好设置更明确地传递给javascript函数的formName。
答案 1 :(得分:0)
[edit]接受的答案是最后一个例子
你说你正在使用jQuery,所以如果你在页面上只有一个表单元素,为什么不呢?
<script type="text/javascript">
function MyValidation__Submit() {
// do validations
var joForm = $('form').eq(0);
for (var i = 0; i < joForm.elements.length; i++) {
// do something
}
return true;
}
</script>
即使您有多张表格,也可以
<script type="text/javascript">
function MyValidation__Submit(obj) {
// do validations
var joForm = $(obj).parents('form').eq(0);
for (var i = 0; i < joForm.elements.length; i++) {
// do something
}
return true;
}
</script>
并将其命名为
OnClientClick="return MyValidation__Submit(this)"
没有jQuery ,您可以恢复为getElementsByTagName()
<script type="text/javascript">
function MyValidation__Submit() {
// do validations
// getElementsByTagName("form") searches for any <form> elements on the page and returns an array of elements
// the [0] then selects the first one in the array that was found
// as long as you've only got one form on the page this should work
var joForm = document.getElementsByTagName("form")[0];
for (var i = 0; i < joForm.elements.length; i++) {
// do something
}
return true;
}
</script>