1

我正在尝试更改我网站的一部分的功能。目前,我有一个在我的表之外的验证按钮。每当用户单击该按钮时,就会发生验证。

但是,我正在以一种方式进行更改,即删除验证按钮并将功能移至位于表内的链接按钮。

下面是我的代码:

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

当单击 Validate 按钮而不是 LinkBut​​ton 时,这非常有效。为了测试它,我不得不放alert("Test :" + formName);线。每当我触发验证按钮时,系统警报都会返回一个字符串值“[object HTMLFormElement]”,考虑到它按照我想要的方式运行,我认为它是可以的。但是,当我尝试触发位于表内的 Validate LinkBut​​ton 时,系统警报返回“未定义”,使我的整个验证代码无用。

有人可以指出我在这里缺少什么吗?我猜它与控件的层次结构有关,因为这是唯一改变的东西。

谢谢!

编辑:

这是我能走的最远,但我仍然无法到达表格。这一回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

4

2 回答 2

0

[编辑] 接受的答案是最后一个例子

你说你正在使用 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>
于 2013-05-29T21:26:26.590 回答
0

我的 ASP 知识有点初级,但我相信这是因为当您为按钮使用“this.form”时,“this”的范围是文档对象。但是当用于您的 LinkBut​​ton 时,“this”的范围是 GridView。如果您要移动触发器项,也许最好更明确地设置传递给 javascript 函数的 formName。

于 2013-05-29T19:03:48.773 回答