繁体   English   中英

JQuery - 麻烦.css('display')属性

[英]JQuery - Trouble with .css('display') property

// CSS
#popupUser{width:180px; height:180px; position:absolute; background:#FFFFFF; border:#000000 2px solid; display:none;}
.viewUser{width:173px; float:left; padding:10px; margin-left:20px; margin-bottom:20px; border:#000000 1px solid;}    

// HTML + Jquery
<body>  
    <div class="contenitore">   
        <script type="text/javascript">
            $(document).ready(function() {      
                $(".viewUser")
                    .mousemove(function (e) {
                        if($("#popupUser").css('display')=='none') {
                $("#popupUser").css({left:e.pageX+15, top:e.pageY -190}).show();
                            alert("None");
                        }
                    })
                    .mouseout(function () {
                    $("#popupUser").hide();
                });         
            });
        </script>      

        <div class="viewUser">
            Content
        </div>
    </div>  

    <div id="popupUser">&nbsp;</div>
</body>     

我想要的是,当我用鼠标继续使用div viewUser时,会显示警告(打印 )。 在此之后,直到我将离开该div,我必须永远不会看到另一个警报(因为显示属性,当我调用.show()函数时,应该被设置为 )。

但事实并非如此:实际上有些时候(当我仍然使用鼠标移动viewUser时)我看到警报。 为什么会这样?

干杯

UPDATE

事实上,我想做的是:当我在viewUser div中使用鼠标时,我会对服务器进行ajax调用以获取一些信息并将其附加到popupUser 所以,我不会每次在div上移动鼠标时调用此ajax调用:)

因为当弹出窗口出现并且鼠标位于其上时, .viewUser的mouseout .viewUser触发并再次关闭它。

如果要跟踪元素,请相对于鼠标重新定位它。

        $(document).ready(function() {      
            $(".viewUser")
                .mousemove(function (e) {
                    var $popU = $("#popupUser");
                    if($popU.css('display')=='none') {
                        $popU.show();
                    }
                    $popU.css({left:e.clientX+2, top: e.clientY-2});
                })
                .mouseout(function () {
                $("#popupUser").hide();
            });         
        });

演示http//www.jsfiddle.net/gaby/RQhTp/


解决方案( 在评论之后 )是对mouseout使用超时,以便div有足够的时间重新定位自己。

        $(document).ready(function() {      
            $(".viewUser")
                .mouseenter(function(e){
                    $("#popupUser").show().css({left:e.clientX+1, top: e.clientY+1});
                     clearTimeout($(this).data('timeout'));
                })
                .mousemove(function (e) {
                    $("#popupUser").css({left:e.clientX+1, top: e.clientY+1});
                })
                .mouseleave(function() {
                    $(this).data('timeout', setTimeout(function(){
                        $("#popupUser").hide();
                    }, 100));

            });         
        });

演示http//www.jsfiddle.net/gaby/RQhTp/3/

你需要.mouseover()而不是.mousemove() - mousemove使你能够跟踪该元素中鼠标的每一个动作; mouseover仅适用于初始鼠标接触。

暂无
暂无

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

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