2012-06-02 66 views
0

我正在使用jquery,這樣當一個圖像被懸停時,一個彈出窗口div顯示來自Ajax調用的數據。jQuery的彈出窗格不保持一直打開(輕彈)

我在IE和FF都測試過,DIV打得不好!基本上,它沒有理由關閉(不移動鼠標)。有時它好像已經開始了懸崖峭壁事件。 我想閃光是你可以使用的術語。

我在Google上搜索過,但找不到任何似乎相關的信息。任何人有一個想法,爲什麼這會是?我的代碼如下:

JS

$(document).ready(function() { 
    $(".hover").hover(
    function(e){ 
    var ref = $(this).attr("wsref"); 
    var url = "https://site/_ref/shop/_base/order_status.php?action=getstatus&ref="+ref+"&sid="+Math.random(); 
    $("#status").show(); 
    var height = $(".status").height(); 
    var width = $(".status").width(); 
    leftVal = e.pageX - width -10 + "px"; 
    topVal = e.pageY - height -10 + "px"; 
    $("#status").css({left:leftVal,top:topVal}); 
    $("#status").html("<div id='loading'></div>").load(url); 
    }, 
    function() { 
    setTimeout('$("#status").hide()',1500); 
    }); 
}); 

HTML

<img class="hover" title="Order Received" name="Order Received" src="https://site/_ref/images/cart.png" wsref="002731"/> 
+0

您正在給出關於懸停事件的div。所以最終它會閃爍。如果你應該添加如果條件返回(不再顯示),如果已經顯示在懸停事件。 –

+0

對不起,不太明白 - 你是否說我需要添加一個if語句,以便只顯示它,如果它不visibile,並隱藏它,如果它是可見的? – Lock

回答

0

試試這個

var isShowing; 
isShowing=false; 
$(document).ready(function() { 
$(".hover").hover(
function(e){ 
if(!isShowing) 
{ 
    var ref = $(this).attr("wsref"); 
    var url = "https://site/_ref/shop/_base/order_status.php?action=getstatus& ref="+ref+"&sid="+Math.random(); 
    $("#status").show(); 
    var height = $(".status").height(); 
    var width = $(".status").width(); 
    $("#status").html("<div id='loading'></div>").load(url); 
    isShowing=true; 
} 
leftVal = e.pageX - width -10 + "px"; 
topVal = e.pageY - height -10 + "px"; 
$("#status").css({left:leftVal,top:topVal}); 

}, 
function() { 
setTimeout('$("#status").hide();',1500); 
}); 
}); 

後,你躲讓isShowing = FALSE;你也可以使用isShowing變量來實現,通過查看狀態元素的style屬性中的顯示。

+0

非常感謝! – Lock

0

您的問題是,當div打開時,您將鼠標懸停在觸發器圖像上。當鼠標在彈出窗口上時(因爲彈出窗口不是觸發圖像的子窗口),它在觸發器本身上被視爲mouseOut。通過關閉彈出窗口。然後鼠標再次觸發觸發器,導致它重新打開。

$(document).ready(function() { 
    $(".hover").mouseover(function(e){ 
     var ref = $(this).attr("wsref"); 
     var url = "https://site/_ref/shop/_base/order_status.php?action=getstatus&ref="+ref+"&sid="+Math.random(); 
     $("#status").show(); 
     var height = $(".status").height(); 
     var width = $(".status").width(); 
     leftVal = e.pageX - width -10 + "px"; 
     topVal = e.pageY - height -10 + "px"; 
     $("#status").css({left:leftVal,top:topVal}); 
     $("#status").html("<div id='loading'></div>").load(url); 
     }); 
    $("#status").mouseout(function() { 
     setTimeout('$("#status").hide()',1500); 
     }); 
    });