gridview.getElementsByTagName(“input”)给输入零为什么?

时间:2009-09-20 07:55:47

标签: asp.net javascript

        function ValidateNew(){

        var gridview = document.getElementById('ctl00_cp_GridViewKRIlib');

        if (gridview != null) {

            var Inputs = gridview.getElementsByTagName("input");

            for (i = 0; i < Inputs.length; i++) {

                if (Inputs[i].type == 'text') {

                    if (Inputs[i].value == "") {
                        alert('Enter the value!');
                        Inputs[i].focus();
                        return false;
                    }
                }
            }
        }
    }

我在

中调用此函数
<asp:TemplateField HeaderText="Edit">
<ItemTemplate>

<asp:LinkButton ID="linkbuttonNew" runat="server" Text="New" CommandName="New" CommandArgument='<%#Container.DataItemIndex%>'
OnClientClick="javascript:return ValidateNew();">
</asp:LinkButton>

INPUTS显示零为什么?

2 个答案:

答案 0 :(得分:0)

这看起来很脆弱:

var gridview = document.getElementById('ctl00_cp_GridViewKRIlib');

您依赖于了解ASP.NET为HTML元素生成的ID,这最多会降低代码的可移植性,最糟糕的是根本不起作用(例如,如果您更改了页面中的其他内容)。在没有任何实际HTML的情况下,我建议该行是最可能的错误来源。

您可以做的是将ASP.NET生成的HTML元素的ID传递给您的JavaScript函数,因此前两行变为

function ValidateNew(elementId) {

    var gridview = document.getElementById(elementId);

我的ASP.NET很生疏,所以我不确定如何最好地获取ID并将其传递给JavaScript。 ClientID是您在生成的控件中需要的属性,您可以在OnClientClick属性中找到该属性(快速搜索到我this page,这可能有所帮助)。并且您的OnClientClick属性值不应该包含“javascript:”前缀。 JavaScript事件处理程序属性的值应该只是JavaScript。

答案 1 :(得分:0)

我知道已经很晚了。我想这会有所帮助:

    <asp:GridView ID="someGrid" ClientIDMode="Static" />

这可以帮助您使用:

    var gridview = document.getElementById('someGrid');