mvc2,查询和qtip问题

时间:2010-07-26 18:27:10

标签: jquery asp.net-mvc-2 qtip

我遇到一个问题,在我的控制器中,我在集合中设置值并将它们存储在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但我不太确定。我几个小时以来一直在处理这个问题,但仍然没有。有人可以帮忙吗?

2 个答案:

答案 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挂钩到那个班级)


@Edit

实际上,出于语义原因,最好使用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>