2009-08-03 30 views
20

Tôi cần tắt tính năng đánh dấu văn bản đã chọn trên ứng dụng web của mình. Tôi có một lý do chính đáng để làm điều này và biết rằng đây thường là một ý tưởng tồi. Nhưng tôi vẫn cần làm. Nó không quan trọng nếu tôi cần phải sử dụng CSS hoặc JS để làm điều đó. Những gì tôi chủ yếu là cho là loại bỏ các màu xanh cho các yếu tố nổi bật.Làm cách nào để tắt tính năng đánh dấu bằng html hoặc JS?

+1

Câu hỏi này không thể được trả lời ở dạng hiện tại. Điều gì gây ra sự nổi bật? Bạn đang nói về làm nổi bật từ khóa hay cái gì khác, chẳng hạn như rollover? Chúng tôi cần thêm thông tin. – zombat

+0

bạn có ý nghĩa gì khi tô sáng? Khi tôi nhấp chuột trái và giữ nút chuột và kéo qua văn bản, nó sẽ được tô sáng. Đó có phải là ý bạn không? –

+0

Bạn có nghĩa là lựa chọn? Giống như khi bạn kéo văn bản? Có một số cách để làm điều đó trong IE và các cách khác nhau để làm điều đó trong các trình duyệt khác. – Nosredna

Trả lời

16

U có thể sử dụng selector css lớp giả (:: lựa chọn và :: - MOZ lựa chọn cho firefox). Ví dụ

::-moz-selection{ 
    background-color:Transparent; 
    color:#000; 
    } 

    ::selection { 
    background-color:Transparent; 
    color:#000; 
    } 
.myclass::-moz-selection, 
.myclass::selection { ... } 
+0

Điều đó hoạt động! Yay! Cảm ơn bạn. –

+0

Tuyệt vời, tôi có thể sử dụng ... – Cyclone

+4

Nó không ngừng lựa chọn (nếu bạn cần nó sử dụng ít nhất javascript -> tôi sử dụng jquery: window.onload = function() { document.onselectstart = function() {return false;} // tức là document.onmousedown = function() {return false;} // mozilla } U có thể cần thêm tập lệnh để hủy phím tắt như trong CTRL CT + A. Nhưng sau đó lại thực sự không có cách đáng tin cậy để ngăn máy tính "chuyên gia" sao chép nội dung họ thấy trên máy tính của họ. – Erv

5

Tôi tin ý bạn là chọn văn bản (ví dụ: kéo chuột qua để đánh dấu). Nếu có, thao tác này sẽ hủy tác vụ chọn trong IE và Mozilla:

window.onload = function() { 
    if(document.all) { 
     document.onselectstart = handleSelectAttempt; 
    } 
    document.onmousedown = handleSelectAttempt; 
} 

function handleSelectAttempt(e) { 
    var sender = e && e.target || window.event.srcElement; 
    if(isInForm(sender)) { 
     if (window.event) { 
      event.returnValue = false; 
     } 
     return false; 
    } 
    if (window.event) { 
     event.returnValue = true; 
    } 
    return true; 
} 

function isInForm = function(element) { 
    while (element.parentNode) { 
     if (element.nodeName.ToUpperCase() == 'INPUT' 
      || element.nodeName.ToUpperCase() == 'TEXTAREA') { 
      return true; 
     } 
     if (!searchFor.parentNode) { 
      return false; 
     } 
     searchFor = searchFor.parentNode; 
    } 
    return false; 
} 
+0

thats những gì tôi muốn, nhưng nó dừng đầu vào được chọn? –

+1

@jcubed có thể. Bạn sẽ cần phải chắc chắn rằng bạn không phải bên trong một đầu vào hoặc textarea trước khi hủy bỏ sự kiện bubbling. Xem chỉnh sửa của tôi. –

0

Tôi nghĩ bạn đang tìm kiếm: lớp giả định tiêu điểm. Hãy thử điều này:

input:focus { 
    background-color: #f0f; 
} 

Nó sẽ cho đầu vào của bạn một màu tím/hồng khi được chọn.

Tôi không chắc chắn thuộc tính nào bạn phải (un) được đặt, nhưng tôi nghĩ bạn có thể tự mình tìm hiểu bằng cách dùng thử và lỗi.

Cũng lưu ý rằng phần nổi bật hoặc vắng mặt của trình duyệt cụ thể là trình duyệt!

0

Bạn có nghĩa là làm nổi bật văn bản khi bạn kéo chuột lên đó không?

Cách tốt nhất để làm điều này sẽ sử dụng thuộc tính CSS3 được gọi là :: lựa chọn, tuy nhiên là CSS3 chưa được hỗ trợ tốt. Hãy tiếp tục và xem xét điều đó, nếu không có thể có cách để làm điều đó với Javascript.

0

Nếu mục tiêu cuối cùng của bạn là sao chép và dán văn bản khó khăn hơn, Javascript và CSS không phải là công nghệ phù hợp vì bạn không thể tắt chức năng nguồn xem của trình duyệt.

Một số ý tưởng khác (không ai trong số họ lý tưởng):

  • một applet java (bạn kiểm soát cả hiển thị và thu hồi các văn bản)
  • tương tự trong một plugin trình duyệt khác nhau (flash, Silverlight, vv)
  • server-side tạo hình ảnh (hiệu suất kém)
+0

không, tôi chỉ muốn không hiển thị nội dung màu xanh mà hầu hết các trình duyệt sử dụng để hiển thị nổi bật –

+0

Tôi thấy, trường hợp sử dụng thú vị :) –

+0

Tôi đồng ý rằng đó là một giả định đáng ngờ để xử lý tất cả các phần của trang như thể nó là văn bản có thể chọn . Đặc biệt khi triển khai kéo và thả các widget giao diện người dùng. – Eric

6

Giải pháp CSS3:

user-select: none; 
-moz-user-select: none; 

Ngoài ra còn có một tiền tố webkit cho người dùng lựa chọn, nhưng nó làm cho một số lĩnh vực hình thức không thể tập trung (có thể là một lỗi tạm thời), do đó bạn có thể đi với lớp giả sau cho webkit thay thế:

element::selection 
Các vấn đề liên quan