2012-04-17 36 views
7

Nói rằng tôi có một (li) danh sách ul trong trang:Làm thế nào để ngăn chặn sự kích đúp vào chọn văn bản trong javascript

<ul> 
<li>xxx<li> 
<li>xxx<li> 
</ul> 

Yếu tố li đều có thể click và nhấn đúp nhấp được, họ được gắn với những sự kiện này và tôi return false trong cả hai.

$('ul li').on('click',function(){ 
    //do what I want 
    return false; 
}).on('dblclick',function(){ 
    //do what I want 
    return false; 
}); 

Nhưng khi người dùng nhấp đúp vào phần tử, văn bản bên trong li sẽ được chọn. điều này có thể được ngăn ngừa bằng cách nào?

Cập nhật:

Giải Quyết bây giờ, tôi sử dụng đoạn mã sau với selector css bởi NiftyDude:

$('ul li').on('click',function(){ 
    //do what I want 
    return false; 
}).....on('dragstart',function(){return false;}).on('selectstart',function(){return false;}); 
+1

Như một lưu ý phụ, bạn có thể muốn sử dụng ['e.preventDefault()' thay vì 'return false'] (http://stackoverflow.com/questions/1357118/event-preventdefault-vs-return-false). –

+0

Không hoạt động cũng – hguser

+0

Nó không phải là một giải pháp, nó chỉ là một cái gì đó mà bạn nên biết và làm. –

Trả lời

18

Bạn có thể vô hiệu hóa lựa chọn văn bản sử dụng css (Lưu ý rằng điều này sẽ vô hiệu hóa hiệu quả tất cả các phương pháp lựa chọn và không chỉ nhấp đúp chuột)

ul li { 
    -webkit-touch-callout: none; 
    -webkit-user-select: none; 
    -khtml-user-select: none; 
    -moz-user-select: none; 
    -ms-user-select: none; 
    user-select: none; 
} 

http://jsfiddle.net/T3d7v/1/

+1

Lưu ý rằng thao tác này sẽ tắt * tất cả * phương pháp lựa chọn, không chỉ nhấp đúp chuột. –

+0

Hmm, bạn nói đúng, sẽ chỉnh sửa nếu tôi có giải pháp tốt hơn –

+0

Tôi không chắc có một giải pháp nào, chỉ cần lưu ý là nó rõ ràng ':)'. –

2

Bạn không thể ngăn chặn sự chọn xảy ra nhưng bạn có thể xóa các lựa chọn ngay sau khi nó được thực hiện:

<script type="text/javascript"> 
document.ondblclick = function(evt) { 
    if (window.getSelection) 
     window.getSelection().removeAllRanges(); 
    else if (document.selection) 
     document.selection.empty(); 
} 
</script> 

Để cũng ngăn chặn việc lựa chọn toàn bộ đoạn bởi "nhấp chuột ba", đây là mã được yêu cầu:

var _tripleClickTimer = 0; 
document.ondblclick = function(evt) { 
    ClearSelection(); 
    window.clearTimeout(_tripleClickTimer); 

    //handle triple click selecting whole paragraph 
    document.onclick = function() { 
     ClearSelection(); 
    }; 

    _tripleClickTimer = window.setTimeout(function() { 
      document.onclick = null; 
    }, 1000); 
}; 

function ClearSelection() { 
    if (window.getSelection) 
     window.getSelection().removeAllRanges(); 
    else if (document.selection) 
     document.selection.empty(); 
} 

Source/Live test.

Tính năng này sẽ hoạt động trên bất kỳ trình duyệt nào, vui lòng báo cáo mọi trình duyệt khi trình duyệt không hoạt động.

+0

: kiểm tra điều này'http: // i.stack.imgur.com/5X5Sp.png' – hguser

+0

Ý của bạn là gì? – Pachonk

+0

Tôi có thể chọn văn bản. – hguser

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