2010-06-20 36 views
9

Có cách nào để cách trình duyệt chéo để phát hiện các thay đổi trực tiếp cho trường nhập không?Phát hiện thay đổi/dán trực tiếp trên JavaScript của trình duyệt chéo

Bằng cách sống, ý tôi là không phải khi trường mất tiêu điểm và không nhấn phím tiếp theo, v.v. Ngay lập tức hoặc một cái gì đó như nó.

Sử dụng sự kết hợp của jQuery và .change(), .keyup(), .bind('paste') và vân vân tôi có thể nhận làm việc trực tiếp phát hiện sự thay đổi trong một số trình duyệt, nhưng không phải tất cả. Sử dụng các kết hợp khác nhau sẽ làm cho nó hoạt động phần nào trong các trình duyệt khác.

Các điều khó khăn nhất để làm việc là chuột thao tác của lĩnh vực đầu vào - chọn văn bản và di chuyển nó (mà chủ yếu là cắt và dán), kích chuột phải và dán hoặc cắt, vv Đối với một số lý do thậm chí .mousedown().mouseup() dường như không cắt nó.

Giải pháp trình duyệt chéo duy nhất tôi có thể nghĩ đến ngay bây giờ là kiểm tra giá trị trường nhập mỗi 100 mili giây và so sánh giá trị với giá trị được lưu trữ. Nhưng điều này có vẻ như quá mức cần thiết khi giải pháp dựa trên sự kiện đến rất gần.

Có plugin jQuery nào thực hiện việc này không? Hay có cách nào khác để đạt được điều này?

+0

jQuery phải tương thích với trình duyệt chéo, ít nhất đối với các trình duyệt đó và phiên bản của chúng được tìm thấy tại http://docs.jquery.com/Browser_Compatibility; Nếu đây không phải là trường hợp tôi sẽ đề nghị bạn nộp một lỗi. – azatoth

+0

@aza Tôi không chắc chắn những người trợ giúp sự kiện jQuery nào sử dụng để đạt được những gì tôi muốn (cập nhật ngay lập tức về bất kỳ thay đổi nào đối với giá trị của trường nhập), vì '.change()' được kích hoạt khi trường đầu vào bị mất tiêu điểm. Bạn có biết? – javascripteroo

+0

Một giải pháp đơn giản được mô tả ở đây: http://whattheheadsaid.com/2010/09/effectively-detecting-user-input-in-javascript – biziclop

Trả lời

2

Để hoàn tất việc thay đổi và xử lý khóa, bạn có thể thêm trình xử lý cho cut/copy/paste. Chúng hoạt động trong Firefox> = 3, IE, Safari và Chrome (nhưng không phải trong Opera/Konqueror).

Điều đó có bao gồm mọi thứ cho trường hợp sử dụng của bạn không?

+0

Có vẻ đầy hứa hẹn. Tuy nhiên, không phát hiện các thay đổi kéo và thả trong IE8. Cảm ơn, sẽ điều tra thêm. Phương thức đính kèm sự kiện 'Truyền thống' là' elm ['onchange'] = fn'? – javascripteroo

+0

@javascripteroo: Điều cần biết, đó là về IE8. Vâng, đó là mô hình truyền thống (giống như elm.onchange = fn), thêm thông tin tại đây: http://www.quirksmode.org/js/events_tradmod.html –

1

Tùy thuộc vào Trình duyệt bạn cần hỗ trợ, bạn có thể sử dụng HTML5 oninput của HTML5.
Nó sẽ kích hoạt ngay khi đầu vào được giám sát thay đổi. Trong jQuery, bạn chỉ cần thực hiện:

$('#my-input').bind('input', function(e) { 
    console.log("#my-input's value changed"); 
}); 
+1

hỗ trợ trình duyệt 'oninput': http: //blog.danielfriesen. tên/2010/02/16/html5-browser-maze-oninput-support / – Dan

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