繁体   English   中英

将mouseover事件绑定到asp.net转发器

[英]Binding mouseover event to asp.net repeater

我有一个显示标题和图像的asp.net转发器。 标题很长,所以我想在鼠标悬停时再次显示标题。

我试图实现鼠标悬停,但存在以下问题。

我的显示如下:

  Repeater Element 1  Repeater Element 2
  Title 1             Title 2 
  Image 1             Image 2

现在,在Element1上进行鼠标悬停时,我的鼠标悬停显示Title1。 在Element2上进行鼠标悬停时,我的鼠标再次显示Title1,我希望它显示Title2吗? 谁能指出我如何实现这一目标。

我的代码如下:

<asp:Repeater ID="rptMonitorSummary" runat="server" OnItemDataBound="rptMonitorSummary_OnItemDataBound">
                                            <ItemTemplate>
                                           <asp:Panel ID="Pnl" runat="server" onmouseover="return showsamplepopup();" onmouseout="return hidesamplepopup();">
                                                    <li class="ui-widget-content ui-corner-tr">
                                                        <h5 class="ui-widget-header">
                                                            <%# Eval("Name").ToString().Length > 9 ? (Eval("Name") as string).Substring(0, 9) : Eval("Name")%>
                                                        </h5>
                                                        <div id="popup" style="position: absolute; width: 80px; height: auto; background-color: Lime;
                                                            border-bottom: solid 3px gray; display: none; border-right: solid 3px gray; display: none;">
                                                            <%#Eval("Name")%>
                                                        </div>
                                                        <div class="center">
                                                            <asp:Image Width="50px" ID="btnPerformanceImage" runat="server" Height="28px"></asp:Image>
                                                        </div>
                                                    </li>
                                                </asp:Panel>
                                            </ItemTemplate>
                                        </asp:Repeater>

javascript函数如下:

function hidesamplepopup() {
            document.getElementById('popup').style.display = 'none';
            return false;
        }
        function showsamplepopup(e) {
            e = (e) ? e : window.event;
            var element = (e.target) ? e.target : e.srcElement;
            var left = element.offsetLeft;
            var top = element.offsetTop;
            while (element = element.offsetParent) {
                left += element.offsetLeft;
                top += element.offsetTop;
            }
            document.getElementById('popup').style.display = 'block';
            document.getElementById('popup').style.left = left;
            document.getElementById('popup').style.top = top;
            return false;
        }

注意, getElementById将返回具有该ID的第一个元素。 而且您为Div的ID使用相同的ID。

您应该为转发器的每个项目使用不同的ID(为每个转发器生成不同的ID),或者更改逻辑以通过其他属性来获取它们。 我强烈建议也使用jQuery。

我不知道你有什么要求。 如果使用jQuery工具提示,可能会容易得多。

这只是一种替代方法。

在此处输入图片说明

<link rel="stylesheet" 
 href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css" />
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>
<script>
    $(function () {
        $(document).tooltip();
    });
</script>

<asp:Repeater ID="rptMonitorSummary" runat="server" 
    OnItemDataBound="rptMonitorSummary_OnItemDataBound">
    <ItemTemplate>
        <asp:Panel ID="Pnl" runat="server">
            <li class="ui-widget-content ui-corner-tr">
           <h5 class="ui-widget-header" title="<%# Eval("Name").ToString() %>">
                    <%# Eval("Name").ToString().Length > 9 ? 
                   (Eval("Name").ToString()).Substring(0, 9) : Eval("Name")%>
                </h5>
                <div class="center">
                    <asp:Image Width="50px" ID="btnPerformanceImage" 
                      runat="server" Height="28px"></asp:Image>
                </div>
            </li>
        </asp:Panel>
    </ItemTemplate>
</asp:Repeater>

我将更改将事件绑定到元素的方式,因为示例代码不使用jQuery,我假设您不想要它:)

首先,您需要将一个类添加到asp:panel,以便可以使用某种方式来标识和选择所有实例。 另外,您将要使用弹出窗口类而不是ID,因为ID在页面上应该是唯一的。

那么您可以执行以下操作:

var elements = document.querySelectorAll('.thatClassYouAdded'),
i = 0, l = elements.length;

for(;i<l;i++)
{
    elements[i].addEventListener('mouseover', function(e) {
        var popup = this.querySelector('.popup');
        //do some stuff to popup
    });
}

还需要注意的是,旧版浏览器(请参阅https://developer.mozilla.org/en-US/docs/Web/API/document.querySelector了解更多信息和支持表)和较旧的IE(不支持pre 9)使用attachEvent代替addEventListener,您可能需要编写其他代码来支持

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM