Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   положение курсора, input type=text (https://javascript.ru/forum/events/10746-polozhenie-kursora-input-type%3Dtext.html)

x-yuri 19.07.2010 03:38

положение курсора, input type=text
 
покритикуйте решение
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
    <title></title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>

<input id="textbox" type="text" value="">
<a id="link" href="#">link</a>
<div id="debug">
</div>

<script type="text/javascript">
function getCursor( input ){
    if( input.selectionStart != null )
        return input.selectionStart;
    else {
        //input.focus();
        var selection = document.selection.createRange().getBookmark();
        var selection2 = input.createTextRange();
        selection2.moveToBookmark( selection );
        var before = input.createTextRange();
        before.setEndPoint('EndToStart', selection2);
        return before.text.length;
    }
}

var textbox = document.getElementById('textbox');
var link = document.getElementById('link');
link.onclick = textbox.onkeyup = function(){
    echo(getCursor(textbox));
};

function echo( s ){
    var debug = document.getElementById('debug');
    debug.innerHTML += s+'<br>';
}
</script>

</body>
</html>

по-хорошему надо было бы в ie фокус устанавливать на элементе, но по той же причине его надо было бы и вернуть, только как...

Octane 19.07.2010 04:20

Для <input> в IE достаточно:
<input type="text" onkeyup="fn(this)">
<script>
function fn(input) {
	var range = input.createTextRange();
	range.setEndPoint("EndToStart", document.selection.createRange());
	alert(range.text.length);
};
</script>

А вот для textarea этот код уже работать не будет (пример с textarea).

Цитата:

Сообщение от x-yuri
по-хорошему надо было бы в ie фокус устанавливать на элементе, но по той же причине его надо было бы и вернуть, только как...

Когда input получает фокус ввода, весь текст в нем становится выделенным, положение каретки не сохраняется в IE. Может быть проверять activeElement, если он не равен input'у, то писать, что положение 0 или дина value.

x-yuri 19.07.2010 06:04

Цитата:

Сообщение от Octane
А вот для textarea этот код уже работать не будет

и наоборот, код по ссылке не будет работать с input type=text. Мой вариант работает и с input type=text и c textarea, получается. За исключением того момента, что игнорируются переводы строк. Правда по ссылке эта проблема тоже не решена


Часовой пояс GMT +3, время: 09:31.