【问题标题】:Access Repeater values using JavaScript使用 JavaScript 访问中继器值
【发布时间】:2011-12-01 14:03:58
【问题描述】:

我在NET上搜索了很多,以获得解决方案,但我找不到

谁能告诉我如何使用 javascript 访问内部中继器控件的标签和文本框值?

这是我的代码

 <asp:Repeater ID="Repeater1" runat="server" DataSourceID="SqlDataSource1">
    <ItemTemplate>
        <table id="t1" width="200px:" style="background-color: skyblue" runat="server">
            <tr>
                <td>
                    <asp:TextBox ID="TextBox3" Text='<%#DataBinder.Eval(Container.DataItem, "empid")%>'
                        runat="server" />
                    <asp:CheckBox ID="CheckBox1" runat="server" />
                    <asp:Label ID="Label1" runat="server" Text='<%#DataBinder.Eval(Container.DataItem, "empid")%>'></asp:Label>
                    <asp:Label ID="lblname" runat="server" Text='<%#DataBinder.Eval(Container.DataItem, "ename")%>'></asp:Label>
                    <br />
                    <br />
                </td>
            </tr>
        </table>
    </ItemTemplate>
</asp:Repeater>

现在我想使用 javascript 访问中继器的标签、文本框

@Diodeus

我试过你的代码

function submitAll() {
        var thisLabel = $('.myLabel').eq(0);
        alert(thisLabel);
    }

但我在警报中得到了结果

[对象对象]

和@deostroll

我用这种方式试过你的代码

但什么也得不到

    function GetData() {
        var arrTables = document.getElementById('myDiv').getElementsByTagName('table');
        var tbl = arrTables[0];
        var td = tbl.childNodes[0].childNodes[0].childNodes[0];
        var txt = td.childNodes[0];
        alert(txt.value);        
    }

【问题讨论】:

  • 请提供您所询问的相关 HTML。

标签: javascript .net repeater


【解决方案1】:
<asp:Label ID="Label1" runat="server" Text='<%#DataBinder.Eval(Container.DataItem, "empid")%>'></asp:Label>

ID 必须是唯一的,因此您不能将相同的 ID 应用于中继器中的所有标签。改用 CSS 类名。

<asp:Label CssClass="myLabel" runat="server" Text='<%#DataBinder.Eval(Container.DataItem, "empid")%>'></asp:Label>

由于 jQuery 带有 .NET,您可以使用它而不是普通的 JavaScript 来更轻松地访问这些元素。

var thisLabel = $('.myLabel').eq(0) 其中 0 是元素的索引,因为可以有很多。

【讨论】:

  • 我无法发布代码 如何发布代码?它像段落一样发布
  • 函数 submitAll() { var thisLabel = $('.myLabel').eq(0);警报(此标签); }
  • 但在警报中我得到了 [object Object]
  • 是的,这为您提供了对该对象的引用。您可以使用 $('.myLabel').eq(0).text() 或 $('.myLabel').eq(0).html() 获取值
  • 太棒了。 :) 但它只是给出单个值,我必须获取所有值,所以我怎样才能获得中继器的行数,以便我可以在 for 循环中使用它
【解决方案2】:

将转发器包装在一个带有一些 id 的 div 中,比如 myDiv。

<div id="myDiv">
<!-- your repeater code -->
<asp:Repeater ID="Repeater1" runat="server"...>
<ItemTemplate>
<table>...</table>
</ItemTemplate>
</asp:Repeater>
</div>

做一个

var arrTables = document.getElementById('myDiv').getElementsByTagName('table');

现在arrTables 只是 div 内所有表格元素的数组。找到所需表的序数:例如看在第一张桌子上。

var tbl = arrTables[0];

找到表格元素对应的td

var td = tbl.childNodes[0].childNodes[0].childNodes[0];

以上内容可能会根据您的浏览器加载 DOM 和内容的方式而有所不同。因此我说你自己调试并找出来。

一旦你得到 td 参考:

var txt = td.childNodes[0];

这将给出文本框。 txt.nextSibling 会给出标签……等等。

【讨论】:

  • 我试过你的代码但没有得到它,我把中继器的 放在
    .. 并以这种方式编写代码函数 GetData() { var arrTables = document.getElementById('myDiv').getElementsByTagName('table'); var tbl = arrTables[0]; var td = tbl.childNodes[0].childNodes[0].childNodes[0]; var txt = td.childNodes[0];警报(txt.value); }
猜你喜欢
相关资源
最近更新 更多
热门标签