Foreach表行按ID及其值查找特定控件

时间:2016-06-14 15:24:17

标签: javascript php jquery asp.net

我正在尝试在jQuery中编写一个函数,该函数遍历所有表行,并通过特定的隐藏控件ID“hdnIsEmpty”搜索隐藏的字段值,问题是我不知道如何通过这个隐藏的控件ID,因为还有其他隐藏的控件,不一定要触摸...... 也许还有其他方法可以得到我不想要的东西,但这是我不成功的尝试/方法,也是我唯一知道的方法:

<udc:Repeater ID="repDetailedInformation" runat="server" DataSource='<%# Eval("DetailsInformation") %>'>
<table id="tblDetails">
    <tbody>
        <tr>
            <td>
                BLA-BLA-BLA Information
            </td>
        </tr>
        <tr>
            <td>
                <udc:HiddenField ID="hdnIsEmpty" runat="server" Value='<%#Eval("IsEmpty") %>' />
            </td>
        </tr>
        <tr>
            <td>
                <udc:HiddenField ID="hdnBlaBla" runat="server" Value='<%#Eval("BlaBla") %>' />
            </td>
        </tr>
        <tr>
            <td>
                BLA-BLA-BLA Information
            </td>
        </tr>
    </tbody>
</table>

和jQuery:

<script type="text/javascript">
$(document).ready(function () {
    function getHiddenBoolean(name) {
        var selector = 'input:hidden[name$="' + name + '"]';
        var field = $(selector);
        return (field != null && field.length > 0) ? field.val().toLowerCase() == "true" : false;
    };  

    var filteredRows = $('#tblDetails tr td').filter(function () {
        return $(this).find('#hdnIsEmpty');
    });

    $.each(filteredRows, function () {
        var isEmpty = getHiddenBoolean(filteredRows);
    });
})

2 个答案:

答案 0 :(得分:2)

您遇到的第一个问题是ASP.Net Webforms在运行时更改了所有id元素的runat="server",因此您无法通过它们进行选择。即使你可以,在这种情况下你会有重复,这是无效的。相反,您可以为这些元素添加class以识别它们。

<tr>
    <td>
        <udc:HiddenField ID="hdnIsEmpty" runat="server" class="hiddenfield" Value='<%#Eval("IsEmpty") %>' />
    </td>
</tr>

从那里你可以循环遍历那个类选择器,如下所示:

$(document).ready(function () {
    $('#tblDetails tr td .hiddenfield').each(function() {
        if ($(this).val().toLowerCase() == 'true') {
            // do something here...
        }
    });
});

如果您无法在控件上添加class属性,则可以使选择器更通用:

$(document).ready(function () {
    $('#tblDetails tr td input:hidden:first').each(function() {
        if ($(this).val().toLowerCase() == 'true') {
            // do something here...
        }
    });
});

答案 1 :(得分:0)

考虑到上面提到的ASP.NET问题后,另一种选择是:

$(document).ready(function (){
  var $hidden = $('.tableClass input.hiddenTouchableElements');

  $hidden.each(function() {
    if ($(this).val().toLowerCase() == 'true') {
      // do something here...
    }
  });
});