Tôi nghĩ Jason Cohen là không chính xác. Vị trí dấu mũ được giữ nguyên khi tiêu điểm bị mất.
[Sửa: Thêm mã cho FireFox mà tôi không có ban đầu.]
[Sửa:. Nhập mã để xác định hộp văn bản hoạt động gần đây nhất]
Trước tiên, bạn có thể sử dụng sự kiện onBlur của mỗi hộp văn bản để đặt biến thành "this" để bạn luôn biết hộp văn bản hoạt động gần đây nhất.
Sau đó, có cách IE để có được vị trí con trỏ cũng hoạt động trong Opera và một cách dễ dàng hơn trong Firefox.
Trong IE khái niệm cơ bản là sử dụng các đối tượng document.selection và đặt một số văn bản vào vùng chọn. Sau đó, bằng cách sử dụng indexOf, bạn có thể nhận được vị trí của văn bản bạn đã thêm vào.
Trong FireFox, có một phương thức gọi là selectionStart sẽ cung cấp cho bạn vị trí con trỏ.
Một khi bạn có vị trí con trỏ, bạn ghi đè lên toàn bộ text.value với
văn bản trước khi vị trí con trỏ + văn bản mà bạn muốn chèn + các văn bản sau khi vị trí con trỏ
Dưới đây là một ví dụ với các liên kết riêng cho IE và FireFox. Bạn có thể sử dụng phương pháp phát hiện trình duyệt ưa thích để tìm ra mã nào để chạy.
<html><head></head><body>
<script language="JavaScript">
<!--
var lasttext;
function doinsert_ie() {
var oldtext = lasttext.value;
var marker = "##MARKER##";
lasttext.focus();
var sel = document.selection.createRange();
sel.text = marker;
var tmptext = lasttext.value;
var curpos = tmptext.indexOf(marker);
pretext = oldtext.substring(0,curpos);
posttest = oldtext.substring(curpos,oldtext.length);
lasttext.value = pretext + "|" + posttest;
}
function doinsert_ff() {
var oldtext = lasttext.value;
var curpos = lasttext.selectionStart;
pretext = oldtext.substring(0,curpos);
posttest = oldtext.substring(curpos,oldtext.length);
lasttext.value = pretext + "|" + posttest;
}
-->
</script>
<form name="testform">
<input type="text" name="testtext1" onBlur="lasttext=this;">
<input type="text" name="testtext2" onBlur="lasttext=this;">
<input type="text" name="testtext3" onBlur="lasttext=this;">
</form>
<a href="#" onClick="doinsert_ie();">Insert IE</a>
<br>
<a href="#" onClick="doinsert_ff();">Insert FF</a>
</body></html>
Điều này cũng sẽ hoạt động với văn bản. Tôi không biết cách định vị lại con trỏ để nó vẫn ở điểm chèn.
Tôi không chắc chắn những gì bạn đang cố gắng để nói. Như ví dụ của tôi cho thấy, bạn có thể lấy vị trí con trỏ ngay cả từ một phần tử không có tiêu điểm. – bmb