Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Замена текста при вводе в объект с contenteditable='true' (https://javascript.ru/forum/misc/29467-zamena-teksta-pri-vvode-v-obekt-s-contenteditable%3D%27true%27.html)

lukingnu 28.06.2012 20:29

Замена текста при вводе в объект с contenteditable='true'
 
Есть объект <span contenteditable='true' >__________</span>
Когда он получает фокус, в него можно вводить текст,он он ВСТАВЛЯЕТСЯ, есле наажать клавишу Ins текст ЗАМЕНЯЕТСЯ, можно ли так сделать,чтоб он заменялся всегда?

Dim@ 29.06.2012 08:47

<html>
<head>
<style>
#span{
position:fixed;
}
</style>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>
<body><b>
<span id='span' contenteditable='true'>LOOOOOOOOOOL</span></b>
<script>
document.onkeydown = function(e){
 e = e || window.event;
 if (e.keyCode == 45){
  span = document.getElementById('span');
  span.innerHTML = 'Текст';
 }
}
</script>
</body>
</html>

devote 29.06.2012 09:09

Dim@,
ты человека не понял... ему не нужно заменять текст при нажатии клавиши Insert ему нужно что бы поле ввода вело себя так, как будто нажата клавиша Insert

Dim@ 29.06.2012 10:47

devote,
хм, насколько я знаю она действует в сочетании с Shift и Ctrl;)

9xakep 29.06.2012 11:24

Dim@,
открой MS Word, напиши что-нибудь, поставь каретку в центре, нажми Ins, и печатай. Теперь понял?

devote 29.06.2012 12:53

Dim@,
ему нужно что-то вроде этого, но только для элемента с contenteditable
<!DOCTYPE html>
<html>
    <head></head>
    <body>
        <textarea id="area" style="width: 100%">________________________________________________________</textarea>
 
        <script type="text/javascript">
            document.getElementById( 'area' ).onkeypress = function( e ) {

                e = e || window.event;

                var target = e.target || e.srcElement,
                    text = target.value,
                    caretPos = 0;

                if ( e.which == null ) {
                    e.which = e.charCode != null ? e.charCode : e.keyCode;
                }

                if ( e.which == 9 || e.which == 8 || e.which == 0 ||
                    /[\x21\x22\x23\x24\x25\x26\x27\x28\x2E]/.test( String.fromCharCode( e.keyCode ) ) ) {
                    return;
                }

                if ( document.selection ) {
                    target.focus();
                    var sel = document.selection.createRange();
                    sel.moveStart( 'character', -target.value.length );
                    caretPos = sel.text.length;
                } else if ( target.selectionStart || target.selectionStart == '0' ) {
                    caretPos = target.selectionStart;
                }

                target.value = text.substr( 0, caretPos ) + text.substr( caretPos + 1 );

                if ( target.setSelectionRange ) {
                    target.focus();
                    target.setSelectionRange( caretPos, caretPos );
                } else if ( target.createTextRange ) {
                    var range = target.createTextRange();
                    range.collapse( true );
                    range.moveEnd( 'character', caretPos );
                    range.moveStart( 'character', caretPos );
                    range.select();
                }
            }
        </script>
    <body>
</html>
с элементами возни просто больше, с возвращением фокуса на ту позицию которую изменяем.

bes 29.06.2012 13:31

А я понял, что он хочет, чтобы после перезагрузки страницы текст, который он ввёл до этой перезагрузки, остался (то есть надо отсылать его и сохранять).


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