0

コントローラーでコレクションに値を設定し、それらを ViewData に保存するという問題があります。例えば:

ViewData["ex1"] = new SelectList(ex1); // a simple collection
ViewData["ex2"] = new SelectList(group.Members, "Id", "Gender");

これらをビューに渡し、このようにループしています。例えば:

<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かもしれないと思いますが、よくわかりません。私はこの問題に何時間も取り組んできましたが、まだ何もしていません。誰でも助けてもらえますか?

4

2 に答える 2

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 selecを実行すると、Jqueryは最初に見つかったIDを選択します。

あなたがあなたの人を容器で包むならば、それはさらに簡単です。

私はあなたのために私がテストして働いた迅速な調整をしました

  %>
    <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>

このコードは次のことを意味します。クラスpersonの各divについて、クラスcbPeronInfoで内部のdivを見つけ、その値をqtipに使用します。(そしてオフコースはqtipをそのクラスにフックします)


@編集

実際、セマンティック上の理由から、(より多くのロジック)の代わりにULを使用する方が良いですが、それを自分で変更する方法を理解できると思いますか?そうでなければ私にサインを与えたいのなら:)

于 2010-07-27T15:43:25.397 に答える
0

外側の c# ループ 'foreach (var pil in pList){' では、同じ '" />
' 要素がおそらく数回再作成されます。

この場合、javascriptvar 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>
于 2010-07-27T11:58:37.963 に答える