【发布时间】:2011-08-19 11:56:29
【问题描述】:
一些背景: 我有一个带有显示实体列表的表格的站点。使用 jQuery,我可以单击表中的一行,这将使用 AJAX 加载有关所选实体的一些额外数据。新行将插入到单击行下方的表格中。此行包含有关实体的更多详细信息,并不是真正的行,只是在 HTML 术语中。它包含一大堆数据。当您单击另一行时,当前显示的详细信息行将被隐藏,并显示新单击实体的详细信息行(如果尚未加载,则使用 AJAX 加载)。这里没有问题。
在详细信息行上还有一个选择框。使用 Ajax 加载详细信息行后,我想绑定 select 的 onchange 事件。我做了以下 jQuery 选择:
$("tr.entity_details[data-entity-id=" + entityId + "] select#SelectedDropDownValue")
问题:
这也可以正常工作,除非在一些非常特殊的情况下(我还不能完全定义)。有时它不会选择select 元素。我使用VS2010进行调试,将这两项输入到我的监视窗口中:
$("tr.entity_details[data-entity-id=" + entityId + "] select#SelectedDropDownValue").length
$("tr.entity_details[data-entity-id=" + entityId + "] select[id=SelectedDropDownValue]").length
在第一个没有选择任何东西的情况下,第二个选择。这对我来说真的很奇怪,因为我认为这两个选择器是等价的。
我可以产生这个的情况是: 我的表中有两个实体。
- 我先点击最下面的:没问题;然后我点击最上面的:没问题。
- 我先点击最上面的:没问题;然后我点击底部的:问题。
我不知道是什么原因造成的。我在想也许我插入新行并将它们隐藏在javascript中,导致选择有点偏离。但我想那将是一个错误。或者可能与详细信息行包含另一个表并且选择位于该内表中有关。
编辑:
添加更多信息。我在 IE9 和 Chrome 下测试了这个。我正在使用 jQuery 1.5.1 开发一个 ASP.NET MVC 3 应用程序。详细信息行由局部视图生成。在这个局部视图中,我使用 Html Helper DropDownListFor。此帮助程序基于您传递给函数的 C# 属性生成选择元素。它使用属性的名称为元素生成名称和 ID。这会导致页面中的所有选择元素都具有相同的 id。正如一些人已经提到的,这可能就是原因。
【问题讨论】:
-
您可能需要发布更多代码伙伴 :)
-
请注意,from the API:引号是必需的,在属性等于选择器中。
-
Matthijs,您在什么浏览器和版本中遇到这些问题?
-
有没有可能有两个具有相同 id 的元素?这可能会导致未定义的行为。
-
您能否向我们展示您尝试绑定到该元素的方式/位置?
标签: jquery html jquery-selectors css-selectors