2012-07-02 17 views
5

Khi tôi cố gắng làm .focus() Tôi mong muốn đặt trọng tâm vào phần tử đầu vào và để xem con trỏ sau ký tự cuối cùng của giá trị. Và tôi thấy nó trong IE.jQuery .focus() hoạt động khác nhau trong mỗi trình duyệt. Làm thế nào để ngăn chặn điều đó?

Trong đầu vào safari/chrome được lấy nét và tất cả văn bản được chọn. Trong đầu vào firefox/opera được lấy nét, nhưng con trỏ đang ở đầu.

Tôi có thể làm gì để ngăn chặn điều đó và có được hành vi chính xác cho tất cả các trình duyệt?

Ví dụ ở đây: http://jsbin.com/ozojol/edit#javascript,html

PS. Phương pháp focus().val('').val(value) không hoạt động trong IE ... Các giải pháp khác tồn tại?

+0

Phiên bản Firefox nào và trên hệ điều hành nào? Firefox 13.0.1 trên Windows 7 đặt con trỏ sau giá trị. –

+0

OSX, FireFox 13.0 :) Tôi sẽ thử 13.0.1 sau, nhưng nó hoạt động khác trong các trình duyệt khác :) Và tôi đang cố tìm giải pháp làm thế nào để ngăn chặn điều đó. – ValeriiVasin

+0

Xem http://stackoverflow.com/a/4716021/96100 –

Trả lời

7

Bạn có thể sử dụng của đầu vào selectionStartselectionEnd tính trong hầu hết các trình duyệt và một số TextRange thứ khó chịu trong IE < 9. Dưới đây là một số mã chuyển thể từ an answer to a similar question.

Demo: http://jsbin.com/azapuy

Code:

function moveCaretToEnd(el) { 
    if (typeof el.selectionStart == "number") { 
     el.selectionStart = el.selectionEnd = el.value.length; 
    } else if (typeof el.createTextRange != "undefined") { 
     var range = el.createTextRange(); 
     range.collapse(false); 
     range.select(); 
    } 
} 

var input = $('#i')[0]; 
input.focus(); 
moveCaretToEnd(input); 
+1

Tôi có thể xác nhận nó hoạt động trong tất cả các trình duyệt chính. – rcdmk

+0

Tuyệt vời! Cảm ơn bạn! – ValeriiVasin

+0

Hoạt động trong FF 16 - tốt đẹp! Bạn phải cẩn thận để gọi moveCaretToEnd với phần tử dom thực tế (như được hiển thị ở trên), không phải đối tượng jQuery. Cái sau không hoạt động. – sieppl

1

Có một plugin nhẹ tuyệt vời để di chuyển dấu mũ đến cuối nội dung trong phần tử của bạn. jQuery Caret

Live Demo

+0

Tính năng này không hoạt động trên Firefox 3.6. Hoạt động trong: IE7, IE8, IE9, Chrome 19 và Safari 4. Di chuyển đến vị trí đầu tiên trong: Opera 11. – rcdmk

+0

@rcdmk Tôi đã cập nhật câu trả lời của mình. ** [jQuery Caret] (https://github.com/DrPheltRight/jquery-caret) ** sẽ giải quyết vấn đề. – Farahmand

+0

jQuery Caret không hoạt động trong IE8. có lẽ những người khác, đã không cố gắng. – ValeriiVasin

0

Các hành vi phổ biến chỉ là select(), mà chọn nhập văn bản trong tất cả các trình duyệt chính (không thể xác nhận nếu nó hoạt động trong tất cả các trình duyệt).

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