jQuery 用于根据下拉列表的更改值在 asp 中继器中设置背景颜色

Posted

技术标签:

【中文标题】jQuery 用于根据下拉列表的更改值在 asp 中继器中设置背景颜色【英文标题】:jQuery for setting background color in asp repeater based on changed value of a dropdownlist 【发布时间】:2020-10-21 23:19:41 【问题描述】:

我的 asp.net 网页中有一个中继器,其中包含一个带有行的表。 一行中有几个文本框、下拉菜单和其他字段。 我想要的是,当我的转发器行中的一个下拉列表的值发生变化时,整个表格行都会获得一种颜色。 我设法在服务器端做这个,但我想要它在客户端。

这是我的代码:

HTML

<table id="InvoerUrenTable" class="InvoerUrenLeftMargin100">    
<asp:Repeater ID="urenRepeater" runat="server">
    <ItemTemplate>
        <tr runat="server" ID="itemTemplateRow">
            ...
            ...
            ...
            <td >
                <asp:DropDownList runat="server" ID="projectDropDown" ></asp:DropDownList>
            </td>
            ...
            ...
            ...
            ...
        </tr>
    </ItemTemplate>
</asp:Repeater>
</table>
<script type="text/javascript">
      $(document).ready(function () 
          $('#projectDropDown').change(function () 
              var index = $(this).parent().children().index($(this));
              $('#urenRepeater tr:nth-child(' + index + ')').addClass("highlight")    
          );
      );
</script>

CSS

.highlight 
background-color: #E52718;

上面的脚本似乎不起作用。 我做错了什么?

2020 年 6 月 7 日更新

我发现我选择了错误的行 ID 来更改课程。

  <script type="text/javascript">
      $(document).ready(function () 
          $('.projDropDown').change(function () 
              var index = $(this).parent().children().index($(this));
              $('#body_urenRepeater_itemTemplateRow_' + index).addClass("highlight")    
          );
      );
  </script>

现在的问题是我的索引是错误的,如果我更改其中一个下拉列表的值,它每次都会标记第一行。

【问题讨论】:

您可以为asp 添加html generated 代码吗? 【参考方案1】:

由于下拉列表位于重复器中 - 因此可能会在最终页面中被复制多次 - 最终会在呈现的 HTML 中以不同的 ID 结束(如果 asp.net 尝试使 ID 在浏览器),否则您最终会得到多个具有相同 ID 的下拉菜单(这是无效的)。无论哪种方式,您都会遇到问题,因为 jQuery 代码无法识别正确的目标。

我建议改用 CSS 类作为选择器。这不会被 asp.net 渲染引擎改变,它还允许您使用一个事件处理程序来定位多个元素。

例如

<asp:DropDownList runat="server" ID="projectDropDown" CssClass="projDropDown" ></asp:DropDownList>

$('.projDropDown').change(function () 

【讨论】:

感谢您的回答。我把它改成了一个类,但仍然没有让它工作。 “没有运气”没有给我任何有用的信息来帮助你进一步。如果您使用浏览器的“查看源代码”功能来检查由 asp.net 发送到浏览器的完成的 HTML,将会很有帮助。完成的 HTML 是 jQuery 正在使用的(它对 &lt;asp:Repeater&lt;asp:Dropdownlist 一无所知 - 这些东西仅由服务器端的 ASP.NET 用于生成真正的 HTML,然后发送到浏览器) .向我们展示您的转发器生成的 HTML,然后我们就有更好的机会了解 jQuery 可能出错的地方。 另外,当您运行代码时,究竟会发生什么?您是否调试过 JQuery(例如,通过使用浏览器的调试器,或通过添加一些控制台日志记录)?例如您是否验证了“更改”事件是否被触发?区分事件是否被触发是有用的,但是它无法添加高亮,或者事件是否根本没有被触发。这两种情况有不同的解决方案。那种信息,加上 HTML,会让我们更清楚地了解情况。

以上是关于jQuery 用于根据下拉列表的更改值在 asp 中继器中设置背景颜色的主要内容,如果未能解决你的问题,请参考以下文章

如何根据对象属性值在下拉列表中选择值 - 选择和角度

在 ASP.NET MVC 中的下拉列表上触发 jQuery 更改事件并将参数传递给 url 操作

如何在下拉列表更改时使用 jQuery 清除 TextBox

根据下拉更改绑定/重新绑定 Kendo Grid

下拉列表的 jQuery 在布局 ASP.NET MVC 5 中不起作用

根据asp.net中的值隐藏元素?