2015-03-13 42 views
0

我試圖檢測鼠標按鍵是否已經按下,如果它在元素上移動。 在safari中,如果按下按鈕,則鼠標事件會發生變化。 Firefox不。在查詢中檢測鼠標按鍵事件

這小提琴/片斷更好解釋的那樣: Safari /鉻當滾過框變成藍色(事件= 0),但如果與滑過變紅:按下左按鈕(事件= 1)。 在Firefox中它總是紅色的(event = 1)。我認爲當鼠標懸停觸發事件時,Firefox是正確的。

問題是我需要Firefox表現得像Safari/Chrome!

http://jsfiddle.net/robertireland/5w5rxrhy/

$('td').mouseover(function(e) { 
 
    
 
    
 
    $(this).removeClass(); 
 
    $('#button').text(e.which); 
 
    
 
    if(e.which==0){ 
 
     $(this).addClass('bgblue'); 
 
    } 
 
    
 
    if(e.which==1){ 
 
     $(this).addClass('bgred'); 
 
    } 
 
});
#output { 
 
    margin-top: 10px; 
 
    border: 1px solid black; 
 
    background: #eee; 
 
} 
 
td{padding:10px; border:1px dotted #ccc; cursor:pointer;} 
 
.bgred{background-color:red;} 
 
.bgblue{background-color:blue;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
<table> 
 
    <tr><td></td><td></td><td></td></tr> 
 
    <tr><td></td><td></td><td></td></tr> 
 
    <tr><td></td><td></td><td></td></tr> 
 
    
 
</table> 
 
<div id="output">Button pressed: <span id="button"></span></div>

+0

首先,我認爲'mouseenter'會在這種情況下,防止起泡比較合適。其次,在發射事件並擊中條件時,檢查「mousedown」。 – DevlshOne 2015-03-13 18:42:22

+0

感謝教育我冒泡。 – MrBob 2015-03-16 12:25:48

回答

0

也許你可以只保留指示鼠標是否處於關閉狀態標誌的軌道,和mouseover活動期間檢查:

var isMouseDown = false; 
 

 
$('body').mousedown(function() { 
 
    isMouseDown = true; 
 
}).mouseup(function() { 
 
    isMouseDown = false; 
 
}); 
 

 
$('td').mouseover(function(e) { 
 
    
 
    $(this).removeClass(); 
 
    $('#button').text(e.which); 
 
    
 
    if (isMouseDown){ 
 
     $(this).addClass('bgred'); 
 
    } else { 
 
     $(this).addClass('bgblue'); 
 
    } 
 
});
#output { 
 
    margin-top: 10px; 
 
    border: 1px solid black; 
 
    background: #eee; 
 
} 
 
td{padding:10px; border:1px dotted #ccc; cursor:pointer;} 
 
.bgred{background-color:red;} 
 
.bgblue{background-color:blue;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
<table> 
 
    <tr><td></td><td></td><td></td></tr> 
 
    <tr><td></td><td></td><td></td></tr> 
 
    <tr><td></td><td></td><td></td></tr> 
 
    
 
</table> 
 
<div id="output">Button pressed: <span id="button"></span></div>

+0

謝謝!這是一種享受 – MrBob 2015-03-16 12:28:46

0

一個稍微簡單的回答..所有的

$('td').mouseenter(function(e) { 
    $(this).removeClass(); 
    $('#button').text(e.which); 
    if(e.which==1 && $('body').mousedown()){ 
     $(this).addClass('bgred'); 
    } else { 
     $(this).addClass('bgblue'); 
    } 
}); 
+0

你會認爲這會起作用,但Firefox也討厭你的! – MrBob 2015-03-16 12:20:48

+0

他們聲稱它是固定的:https://bugzilla.mozilla.org/show_bug.cgi?id=432698 – DevlshOne 2015-03-17 18:11:53

相關問題