2013-08-20 24 views
5

Tôi có một trường nhập mà tôi không muốn người dùng dán bất kỳ giá trị nào trong đó. Tôi đang sử dụng mã jQuery sau đây và nó hoạt động tốt trên trình duyệt máy tính để bàn và iPhone Safari. Vấn đề là nó không hoạt động trên trình duyệt Android.Làm thế nào để vô hiệu hóa 'Dán' trong trình duyệt Android bằng cách sử dụng JQuery?

$('#no_paste').bind("paste", function(e) {     
     e.preventDefault(); 
}); 

Đây là fiddle

+0

Tôi biết nó không liên quan đến câu hỏi, nhưng tại sao lại vô hiệu hóa dán? –

+0

Vâng, các trường nhập như xác nhận email, xác nhận mật khẩu không được phép dán. – CalebC

+1

Tôi không chắc mình đồng ý với điều đó. Một số thực phẩm cho suy nghĩ: [Ngăn chặn người dùng dán từ bảng tạm vào trường biểu mẫu bắt buộc] (http://ux.stackexchange.com/q/21062/4487), [Tôi có nên cho phép người dùng sao chép/dán vào xác nhận không lĩnh vực e-mail cho một hình thức đăng ký?] (http://ux.stackexchange.com/q/1488/4487) –

Trả lời

1

Tôi đã thử nghiệm này trên Galaxy SIII và trình duyệt Android dường như không gửi sự kiện paste. Tuy nhiên, nó vẫn gửi sự kiện input sau khi một cái gì đó được dán.

Nếu người dùng nhập vào một trường, anh ta sẽ kích hoạt một sự kiện input cho mỗi chữ cái. Tuy nhiên, nếu anh ấy dán, sự kiện input sẽ chỉ kích hoạt một lần cho toàn bộ chuỗi đã được dán. Dựa trên quan sát này, chúng tôi có thể chặn dán như sau:

$('#ie').bind("input", function() { 
    var previousValue = $(this).data('old_value') || '', 
     newValue = $(this).val(); 

    if((newValue.length - previousValue.length) > 1) { 
     $(this).val(previousValue); 
    } 

    $(this).data('old_value', $(this).val()); 
}); 

Bạn sẽ tìm thấy JSFiddle here.

Xin lưu ý rằng điều này cũng sẽ chặn tự động hoàn thành và tất cả các kỹ thuật nhập khác lạ hoạt động theo cách tương tự (tôi không biết về bất kỳ).

+0

Tốt hack! Nhưng nếu người dùng dán một ký tự thì nó vẫn hoạt động. – CalebC

+0

@CalebC Chắc chắn, nhưng thật khó để tin rằng ai đó sẽ dán toàn bộ email/mật khẩu thư bằng chữ cái chỉ để tránh 'dán' bảo vệ. Làm như vậy phức tạp hơn nhiều và cồng kềnh hơn gõ, vậy điểm là gì? Tuy nhiên, nếu bạn thực sự có các trường đầu vào mà bạn mong đợi chỉ một chữ cái thì bạn chỉ cần làm điều đó: nếu sự kiện 'input' được gửi nhưng không có sự kiện' keydown' nào được gửi trước khi chúng ta có thể phân loại nó thành 'paste'. –

+0

Đủ công bằng, tôi sẽ đánh dấu đây là câu trả lời. – CalebC

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