2009-10-19 42 views
14

Có một tính năng phổ biến của các trình duyệt hiện đại, nơi người dùng có thể chọn một số văn bản và kéo nó vào trường nhập. Trong cùng một trường, nó làm cho việc di chuyển văn bản, giữa các trường khác nhau mà nó sao chép. Làm cách nào để tắt tính năng này? Nếu không có cách di động, tôi chủ yếu quan tâm đến firefox. Đây là một webapp mạng nội bộ, vì vậy tôi cũng quan tâm đến việc sửa đổi trình duyệt/nhận được một plugin để làm điều này. Có lẽ một số cài đặt cấp hệ thống (tôi đang sử dụng Windows XP)?tắt kéo và thả văn bản

Tôi cần giữ chức năng chọn sao chép-chọn mặc định.

Nền là tôi có các biểu mẫu nhập dữ liệu nhiều trường và người dùng thường xuyên kéo thứ gì đó do nhầm lẫn.

+0

Câu trả lời gửi về mặt kỹ thuật nên làm những gì bạn muốn, nhưng tôi muốn đặt câu hỏi về động cơ của bạn - bạn có thể sẽ khiến nhiều người dùng phiền phức hơn bạn. Nghe có vẻ hơi ngây thơ, nhưng nếu mọi người không thể tìm ra cách sử dụng chuột đúng cách, đó là vấn đề của họ, không phải của bạn. – DisgruntledGoat

+0

Vâng, người dùng đã yêu cầu tôi thực hiện một điều như vậy :) Nghiêm túc, tôi chưa bao giờ thấy bất kỳ ai sử dụng tính năng "" này, và tôi đã sai lầm văn bản mà tôi đã chỉnh sửa nhiều lần nhờ vào nó. Về kiểm tra nếu nó hoạt động - Tôi sẽ làm điều đó vào ngày mai tại nơi làm việc. – maniek

Trả lời

4

Mã này sẽ làm việc trong tất cả các phiên bản của Mozilla và IE.

function preventDrag(event) 
{ 
if(event.type=='dragenter' || event.type=='dragover' || //if drag over event -- allows for drop event to be captured, in case default for this is to not allow drag over target 
    event.type=='drop') //prevent text dragging -- IE and new Mozilla (like Firefox 3.5+) 
{ 
    if(event.stopPropagation) //(Mozilla) 
    { 
    event.preventDefault(); 
    event.stopPropagation(); //prevent drag operation from bubbling up and causing text to be modified on old Mozilla (before Firefox 3.5, which doesn't have drop event -- this avoids having to capture old dragdrop event) 
    } 
    return false; //(IE) 
} 
} 

//attach event listeners after page has loaded 
window.onload=function() 
{ 
var myTextInput = document.getElementById('textInput'); //target any DOM element here 

if(myTextInput.addEventListener) //(Mozilla) 
{ 
    myTextInput.addEventListener('dragenter', handleEvents, true); //precursor for drop event 
    myTextInput.addEventListener('dragover', handleEvents, true); //precursor for drop event 
    myTextInput.addEventListener('drop', preventDrag, true); 
} 
else if (myTextInput.attachEvent) //(IE) 
{ 
    myTextInput.attachEvent('ondragenter', preventDrag); 
    myTextInput.attachEvent('ondragover', preventDrag); 
    myTextInput.attachEvent('ondrop', preventDrag); 
} 
} 
3

thêm dòng sau vào thẻ lĩnh vực của bạn:

#ondragstart is for IE, onmousedown is for firefox 
ondragstart="return false" onmousedown="return false" 
+0

Ngoài ra còn có 'onselectstart' có thể hữu ích. – DisgruntledGoat

+0

Đối với firefox, điều này là không đủ (quá nhiều, thực sự), nó hoàn toàn vô hiệu hóa việc sử dụng chuột trên một trường đầu vào đã cho. Bạn thậm chí không thể chọn nó. Onselectstart cũng không đủ tốt. Vì vậy, vẫn không có giải pháp cho firefox - cho IE ondragstart làm điều đúng. – maniek

+0

nó không hoạt động vì onmousedown = "return false" mà thực sự vô hiệu hóa sự kiện mousedown vì vậy không có thắc mắc u không thể bấm – Prozi

18

Đối với mục đích lưu trữ:

<body ondragstart="return false" draggable="false" 
     ondragenter="event.dataTransfer.dropEffect='none'; event.stopPropagation(); event.preventDefault();" 
     ondragover="event.dataTransfer.dropEffect='none';event.stopPropagation(); event.preventDefault();" 
     ondrop="event.dataTransfer.dropEffect='none';event.stopPropagation(); event.preventDefault();" 
> 

làm những gì tôi muốn. Bạn có thể thêm ondrag * xử lý để hình thành các yếu tố, quá, giống như < đầu vào ondragenter = ... >

tham khảo url: https://developer.mozilla.org/En/DragDrop/Drag_Operations

+0

onmousedown = "return false;" cũng hoạt động trên firefox/chrome afaik ... có thể sai ... Lưu ý rằng "Devil" có thể không làm điều tương tự. – Warty

0

ondraggesture được các phiên bản cũ hơn của Firefox thay vì ondragstart.

8

Điều này hoạt động ..... Hãy thử nó.

<BODY ondragstart="return false;" ondrop="return false;"> 

hy vọng điều đó sẽ hữu ích. Cảm ơn

0

Sử dụng đoạn mã sau

function allowDrop(ev) { 
    ev.preventDefault(); 
} 

function drag(ev) { 
    ev.dataTransfer.setData("Text", ev.target.id); 
} 

function drop(ev) { 
    ev.preventDefault(); 
    var data = ev.dataTransfer.getData("Text"); 
    ev.target.appendChild(document.getElementById(data)); 
} 

và:

<input type="text" ondrop="drop(event)" ondragover="allowDrop(event)"> 

Xem: http://jsfiddle.net/zLYGF/25/