2012-04-30 29 views
27

Tôi có một <div> với một loạt văn bản trong đó. Điều này <div> cũng có một sự kiện .click() trên nó bằng cách sử dụng jQuery.jQuery .click() đang kích hoạt khi chọn/tô sáng văn bản

Sự cố tôi gặp phải là .click() đang được kích hoạt khi chọn/đánh dấu văn bản. Thậm chí giữ chuột trong vài giây trước khi phát hành.

Đây là một JSFiddle cho thấy vấn đề này: http://jsfiddle.net/ym5JX/

Các hành vi mà tôi mong chờ là làm nổi bật văn bản là không giống như cách nhấp vào phần tử.

+1

Đó là bởi vì một 'click' là một 'mousedown' theo sau là một' mouseup'. –

+3

'mousedown + mouseup = click.' Làm nổi bật nó, do đó, nó được kích hoạt bấm. –

+0

Bí ẩn lớn ở đây là gì? – j08691

Trả lời

57

Đó là vì clickmousedown, sau đó là mouseup. Đề xuất của tôi là kiểm tra getSelection bên trong trình xử lý click. Nếu nó được thiết lập, sau đó bạn chọn một cái gì đó, khác bạn chỉ cần nhấp vào.

$('#click').click(function() { 
    var sel = getSelection().toString(); 
    if(!sel){ 
     alert("clicked"); 
    } 
});​ 

DEMO: http://jsfiddle.net/ym5JX/3/

+1

Đây là hành vi tôi đang tìm kiếm, cảm ơn! – krische

+0

Bạn được chào đón :-) –

+2

có thể muốn kiểm tra độ dài 'haveSel = getSelection(). ToString(). Length> 0' –

6

Như tôi đã được đăng trên bình luận, mosuedown + mouseup = click đó là chính xác những gì làm nổi bật không. Có workaround cho điều này .. xem dưới đây,

var isClick = 0; 
$('#click').click(function() { 
    if (isClick == 1) { 
     alert("clicked"); 
    } 
}).mousedown(function() { 
    isClick = 1; 
}).mousemove(function() { 
    isClick = 0; 
}); 

DEMO

+5

Kiểm tra xem con chuột di chuyển giữa 'mousedown' và' mouseup', thông minh :-P –

Các vấn đề liên quan