2012-06-28 42 views
17

Tôi đã nhìn thấy/nghe tất cả về việc vô hiệu hóa lựa chọn văn bản với các biến thể của user-select, nhưng không ai trong số những người đang làm việc cho các vấn đề tôi gặp phải. Trên Android (và tôi giả sử trên iPhone), nếu bạn chạm và giữ trên văn bản, nó sẽ làm nổi bật nó và sẽ trả về các cờ nhỏ để kéo và chọn văn bản. Tôi cần phải vô hiệu hóa những người (xem hình):Mobile Web - Vô hiệu hoá dài touch/taphold lựa chọn văn bản

screenshot

Tôi đã thử -webkit-touch-callout không có kết quả, và thậm chí đã cố gắng những thứ như $('body').on('select',function(e){e.preventDefault();return;}); vô ích. Và các thủ thuật giá rẻ như ::selection:rgba(0,0,0,0); sẽ không làm việc, hoặc, như ẩn này sẽ không giúp đỡ - lựa chọn vẫn xảy ra và nó sẽ phá vỡ giao diện người dùng. Thêm vào đó tôi đoán những lá cờ đó vẫn sẽ ở đó.

Bất kỳ suy nghĩ sẽ là tuyệt vời. Cảm ơn!

+0

Hmmm. Fiddle dường như hoạt động khi tôi thử nghiệm nó trên điện thoại của mình, nhưng tôi không chắc chắn 100% nó sẽ làm việc cho tôi trong sản xuất - tôi vẫn cần có khả năng kích hoạt các sự kiện (đáng chú ý là 'touchstart',' touchmove', và 'touchend') trên các phần tử. Mặc dù, xem xét điều này chỉ diễn xuất trên 'selectstart', chúng tôi có thể là tốt. Tôi sẽ kiểm tra nó ra tối nay và lấy lại cho bạn :) –

Trả lời

14

tham khảo:

jsFiddle Demo with Plugin

Trên đây jsFiddle Demo tôi đã sử dụng một Plugin cho phép bạn ngăn chặn bất kỳ khối văn bản từ được chọn trong Android hoặc iOS thiết bị (cùng với các trình duyệt trên máy tính để bàn).

Thật dễ dàng để sử dụng và đây là đánh dấu mẫu một lần plugin jQuery được cài đặt.

HTML mẫu:

<p class="notSelectable">This text is not selectable</p> 

<p> This text is selectable</p> 

mẫu jQuery: Mã

$(document).ready(function(){ 

    $('.notSelectable').disableSelection(); 

}); 

Plugin:

$.fn.extend({ 
    disableSelection: function() { 
     this.each(function() { 
      this.onselectstart = function() { 
       return false; 
      }; 
      this.unselectable = "on"; 
      $(this).css('-moz-user-select', 'none'); 
      $(this).css('-webkit-user-select', 'none'); 
     }); 
     return this; 
    } 
}); 

mỗi bình luận thông điệp của bạn:I still need to be able to trigger events (notably, touchstart, touchmove, and touchend) on the elements.

tôi sẽ chỉ đơn giản là sẽ sử dụng một wrapper đó là không bị ảnh hưởng bởi plugin này, nhưng đó là văn bản nội dung được bảo vệ sử dụng plugin này.

Để cho phép tương tác với một liên kết trong một khối văn bản, bạn có thể sử dụng cho tất cả span tags nhưng liên kết và thêm tên lớp .notSelected cho chỉ những span tags, do đó duy trì lựa chọn và tương tác của liên kết neo.

Cập nhật trạng thái: Cập nhật này jsFiddle xác nhận bạn lo ngại rằng có lẽ các chức năng khác có thể không hoạt động khi chọn văn bản bị tắt. Được hiển thị trong jsFiddle cập nhật này là jQuery Click Event listener sẽ kích hoạt Cảnh báo trình duyệt khi Chữ in đậm được nhấp vào, ngay cả khi Chữ in đậm đó không thể chọn văn bản.

+0

Điều này không làm việc cho Android của tôi 2.3.3 ,,, Chỉ cần đi đến jsFiddle của bạn và đã thử nó ra.Chọn tất cả các văn bản.Bất cứ ý tưởng? – Oneezy

+0

Cảm ơn thông tin phản hồi Sau khi trang web JsFiddle đã tải, nhấn nút RUN trước khi thử nghiệm Ngoài ra, trong khi bạn về mặt kỹ thuật có thể chọn tất cả văn bản, hãy sao chép và dán vào tài liệu tiếp theo sẽ không dán phần văn bản bị chặn. Thiết bị Android với số phiên bản đó. Suy nghĩ? – arttronics

+0

+1 Tuyệt vời, cảm ơn @arttronics! Biến thể nào có thể ngăn menu ngữ cảnh hiển thị trên "liên lạc dài"? –

27
-webkit-touch-callout:none; 
-webkit-user-select:none; 
-khtml-user-select:none; 
-moz-user-select:none; 
-ms-user-select:none; 
user-select:none; 
-webkit-tap-highlight-color:rgba(0,0,0,0); 

Điều này sẽ tắt nó cho mọi trình duyệt.

+0

Không có nghĩa là, nhưng bạn đã đọc câu hỏi ở tất cả ?? Tôi có chính xác rằng trát trên CSS của tôi (từ ID cá nhân/lớp học tất cả các con đường lên đến cơ thể và '*'), và tôi tuyên bố rõ ràng giấu nổi bật là một ý tưởng tồi .... –

+2

Vâng, tôi đã đọc của bạn bài đăng. Bây giờ, bạn đã thực sự thử mã? Ứng dụng này đã thêm chú thích -webkit-touch-out và cách chính xác để ngăn lớp phủ đánh dấu bằng cách sử dụng -webkit-tap-highlight-color. Tôi sử dụng điều này trong webapps của tôi và nó hoạt động tốt - không có menu nội dung, không làm nổi bật và không có lựa chọn. – CoreyRS

+1

Tôi cho rằng tôi đã không đề cập ban đầu, nhưng tôi đã có '-webkit-touch-callout: none;' trong đó toàn bộ thời gian là tốt. Điều duy nhất '-webkit-tap-highlight-color' sẽ làm là làm nổi bật trong suốt, __not__ vô hiệu hóa nó. Tôi không bận tâm với mã ban đầu bởi vì nó không phải là bất cứ điều gì tôi đã không nhìn thấy trước đây, nhưng chỉ để xoa dịu bạn tôi đã thử nó và nó đã không hoạt động. Bạn đã thử nghiệm hệ điều hành/thiết bị nào trên thiết bị đó? Không hoạt động trên Android 2.3 hoặc 3.0 ... –

1

-webkit-user-chọn: none; không được hỗ trợ trên Android cho đến 4.1 (xin lỗi).

+2

Vì vậy, không có cách nào để loại bỏ/ngăn chặn nó ?! :( –

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