2011-10-08 27 views
11

Có thể thực hiện một việc như sau:Kiểm tra xem nếu bạn đã khai báo với một câu lệnh if?

if ($(this).mousedown() == true) { 

Tôi nghĩ điều đó có hiệu quả nhưng không.

Chi tiết bổ sung: Tôi đang cố gắng kiểm tra xem nút chuột có bị tắt khi chuột rời khỏi DIV cụ thể không, vì vậy nếu người đó đang giữ nút chuột trong khi chuột rời khỏi div, hãy làm điều này, nếu không làm việc đó đi.

+0

Bạn có muốn biết nếu nút chuột trái là xuống vào một mục, hoặc nếu họ chỉ ép nó bất cứ nơi nào trên trang web? – Ben

+0

Bạn đang cố gắng xác định sự kiện nào đã kích hoạt một hàm/phương thức? –

+0

Đã cập nhật câu hỏi, có nút trái xuống trên div. –

Trả lời

19

Cách đơn giản nhất tôi có thể nghĩ là để ràng buộc mousedownmouseup người nghe sự kiện vào document và cập nhật một biến toàn cục cho phù hợp. Trong sự kiện mouseout của phần tử của bạn, bạn có thể kiểm tra trạng thái của biến đó và hành động phù hợp. (Lưu ý: điều này giả định rằng bạn không quan tâm có hay không con chuột đã được nhấn xuống trong khi trên div hay không ... bạn sẽ phải làm rõ câu hỏi của bạn xung quanh đó).

var down = false; 
$(document).mousedown(function() { 
    down = true; 
}).mouseup(function() { 
    down = false; 
}); 
$("#example").mouseout(function() { 
    if(down) { 
     console.log("down"); 
    } 
    else { 
     console.log("up"); 
    } 
}); 

Dưới đây là working example ở trên.

+0

Sẽ có vấn đề khi sử dụng '$ .data()' để gắn biến 'down' vào phần tử' # example'? –

+0

Không, không hề có vấn đề gì. Tốt suy nghĩ, để tránh việc sử dụng một biến toàn cầu. –

+0

Tôi nghĩ nếu điều này cần phải có trên nhiều hơn một phần tử, ví dụ. Điều duy nhất tôi đang nghĩ đến là tốc độ. –

1

http://jsfiddle.net/5HrWF/

giống như thế này?

Code:

<!DOCTYPE html> 
<html> 
<head> 
    <script src="http://code.jquery.com/jquery-latest.js"></script> 
</head> 
<body> 
    <p>Press mouse and release here.</p> 

<script> 
    $("p").mouseup(function(){ 
     $(this).append('<span style="color:#F00;">Mouse up.</span>'); 
    }).mousedown(function(){ 
     $(this).append('<span style="color:#00F;">Mouse down.</span>'); 
    }); 

</script> 

</body> 
</html> 
0

Alright, cũng lựa chọn tốt nhất tôi có thể cung cấp cho bạn là thế này: http://jsfiddle.net/qK8rr/2/

+0

Điều này nghe có vẻ như một bản ghi bị hỏng, nhưng vui lòng đăng mã thực tế của bạn vào câu trả lời (đây được xem là phương pháp hay nhất về SO). ':)' –

5

Trả lời câu hỏi ban đầu của bạn, có điều này là có thể. Khi sự kiện mousedown kích hoạt trên một phần tử, phần tử đó sẽ hoạt động và được chọn bởi bộ chọn giả: hoạt động. Trong jQuery nếu không có gì được chọn, một mảng rỗng sẽ được trả về, chúng ta có thể sử dụng lợi thế của chúng ta kết hợp với thuộc tính mảng .length và biến bộ chọn giả đang hoạt động thành một kiểm tra để xem con chuột có rơi xuống trên một phần tử cụ thể hay không vậy:

if ($('#id:active').length) { 
    //do something 
} 

Kiểm tra nếu chuột xuống trên một yếu tố cụ thể tại một thời điểm cho trước là một sự kiện khác nhau và không đi với tiêu đề của câu hỏi này và nên được thay đổi có thể tôi thêm. Google đưa tôi đến đây và câu trả lời này là dành cho những người chắc chắn sẽ theo sau.

0

Kiểm tra phần này. http://jsfiddle.net/b1Lzo60n/

Mousedown bắt đầu hẹn giờ kiểm tra xem chuột có bị giảm sau 1 giây hay không.

<button id="button">Press me</button> 
<div id="log"></div> 

Code:

var mousedown = false; 
var mousedown_timer = ''; 
$('#button').mousedown(function(e) { 
    mousedown = true; 
    $('#log').text('mousedown...'); 
    mousedown_timer = setTimeout(function() { 
     if(mousedown) { 
      $('#log').text('1 second'); 
     } 
    }, 1000); 
}).mouseup(function(e) { 
    mousedown = false; 
    clearTimeout(mousedown_timer); 
    $('#log').text('aborted'); 
}); 
Các vấn đề liên quan