我遇到一个问题,在我的控制器中,我在集合中设置值并将它们存储在ViewData中。例如:
ViewData["ex1"] = new SelectList(ex1); // a simple collection
ViewData["ex2"] = new SelectList(group.Members, "Id", "Gender");
我将这些传递给我的View并像这样循环。例如:
<div id="divListBox" style="overflow:auto; border:1px solid #CCCCCC; padding-left:5px; background-color:white; height: 130px">
<%
var list = this.ViewData["e2x"] as SelectList;
var pList = this.ViewData["ex1"] as SelectList;
foreach (var p in list)
{
foreach (var pil in pList)
{
if(pil.Text.Contains(p.Value)) // ex1 does contains ex2
{
%>
<input id="cbPerson" type="checkbox" value="<%= p.Value %>" />
<label for="cbPerson"><%= p.Text %></label>
<input id="cbPersonInfo" type="hidden" value="<%= pil.Text %>" /><br />
<%
}
}
}
%>
</div> ...
这是我的jQuery。例如:
$('#divListBox > input').each(function() {
var personInfo = $('#cbPersonInfo').val();
$(this).append($('personInfo'));
$('*').qtip('hide');
$('#divListBox label').each(function() {
$(this).qtip({
content: personInfo,
show: 'mouseover',
hide: 'mouseout',
style: {
classes: 'ui-tooltip-custom',
tip: true
},
position: {
my: 'left bottom',
at: 'top right'
}
});
});
});
如果我将输入类型“隐藏”设置为“文本”,我会看到每个输入的正确信息。然而,当我将鼠标悬停在它们上面时,第一个信息显示为所有这些信息的工具提示。我想这可能是我的jquery但我不太确定。我几个小时以来一直在处理这个问题,但仍然没有。有人可以帮忙吗?
答案 0 :(得分:2)
的foreach:
id="cbPerson" type="checkbox" value="<%= p.Value %>" />
<label for="cbPerson"><%= p.Text %></label>
id="cbPersonInfo" type="hidden" value="<%= pil.Text %>" /><br />
意味着您有多次相同的ID(ID总是唯一的),所以当您对ID进行jquery选择时,Jquery会选择它找到的第一个
如果你把你的人包在一个容器里,那就更容易了。
我为你做了一个快速调整我测试和工作
%>
<div class="person">
<input id="cbPerson" type="checkbox" value="<%= p.Value %>" />
<label for="cbPerson"><%= p.Text %></label>
<input id="cbPersonInfo" type="hidden" value="<%= pil.Text %>" /><br />
</div>
<%
<script type="text/javascript">
// for each container with class person
$('.person').each(function () {
//find the input with class cbPersonInfo which is !!!! IN !!!! $(this): $(this) is now the container
var personInfo = $(this).find(".cbPersonInfo").val();
$(this).qtip({
content: personInfo,
show: 'mouseover',
hide: 'mouseout',
style: {
classes: 'ui-tooltip-custom',
tip: true
},
position: {
my: 'left bottom',
at: 'top right'
}
});
});
</script>
此代码表示:对于每个具有类人的div,使用类cbPeronInfo查找div并使用它的qtip值。 (并且当场将qtip挂钩到那个班级)
实际上,出于语义原因,最好使用UL而不是(更多逻辑),但我想你可以弄清楚如何自己改变它?如果你想给我一个标志:)
答案 1 :(得分:0)
对于你的外部c#循环'foreach(pList中的var pil){'可能会多次重新创建相同的'“/&gt;
'元素。
javascript var personInfo = $('#cbPersonInfo').val();
选择(并重复选择相同的元素,因此所有悬停的工具提示相同,在本例中为pil.Text
如果为多个元素分配了相同的ID,则使用该ID的查询将仅选择DOM中的第一个匹配元素。 (http://is.gd/dM4EG)
确保页面中的所有html元素都具有唯一ID。
编辑:解决方案的快速链接(http://craigsworks.com/projects/qtip_new/forum/take-tooltip-content-from-the-element-attributes-t-8.html)。将在今天晚些时候更新可能的解决方案。
<% foreach (var qt in Model)
{%>
<input id="cbPerson" type="checkbox" value="<%= qt.Value %>" />
<label for="cbPerson" qTip="<%=qt.Text %>"><%= qt.Text %></label>
<input id="cbPersonInfo" type="hidden" value="<%= qt.Text %>" /><br />
<%} %>
<script type="text/javascript">
$(document).ready(function () {
$('[qTip]').each(function () { // Find all elements that have the qTip attribute (labels)
var personInfo = $(this).attr('qTip');
$(this).qtip({
content: personInfo ,
show: 'mouseover',
hide: 'mouseout',
position: { target: 'mouse' }
});
});
});
</script>