2016-05-31 1 views
-1

몇 가지 복잡한 이유 때문에 사용자가 contenteditable div에 enter 키를 누를 때 나는 하드 코드가 있어야 라인 변경의 정상적인 작동을 모방 할 수 있습니다. 키를 입력하면 먼저 두 개의 br 태그가 생성됩니다. (잘 작동) 그리고 두 번째, 백 스페이스 (잘 작동)에 대한 사용자의 모방을 마침으로써 마지막으로 BR을 삭제하십시오.Javascript : conteditable div에서 Enter 키를 누를 때 백스 페이스 키를 트리거하는 방법은 무엇입니까?

내 시도가 캐럿 위치에서 사용자의 백 스페이스 키 누르기를 모방하지 못합니다.

HTML :

<div id="hithere" style="border:1px solid black" contenteditable="true" autocomplete="off" spellcheck="false"></div> 

자바 스크립트 :

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js"></script> 

<script> 
$('div[contenteditable]').keydown(function(e) { 

    if (e.keyCode === 13) { 

       document.execCommand('insertHTML', false, ' <br><br>'); 
        $(function() { 
        var bre = $.Event('keypress'); 
         bre.keyCode= 8; // enter 
        document.trigger(bre); 
        }); 
    } 

    // // prevent the default behaviour of return key pressed 
    return false; 
    }); 
</script> 
+0

을 당신은 알고이는 것 같아 가능성이 희박한 ... 당신은 "__have to__"이라고 씁니다 - 당신이 이것을 믿게 만드는 코드를 변경할 수 없다는 뜻입니까? 그리고 나는 왜 당신이 단지 하나만 원한다면 왜 두 번의 휴식을 만드는 지 모르겠다. –

+0

아니요 변경할 수 없습니다. .. :( – ryanpika

+1

하나만 필요할 때
을 두 개 만드는 이유는 무엇입니까? –

답변

1

나는 당신이 아마에 달려 있지만 약 작성하지 않은 문제를보고하십시오 <br /> 삽입 을하지만, 사용자가 계속되면 입력 , 텍스트는 나누기 위에 삽입됩니다.

당신은 여기를 참조하십시오 두 개의 구성 요소 \ 연구와 \ n (캐리지 리턴, 뉴 라인)

document.execCommand('insertText', false, '\r\n'); 

를 사용하는 대신 텍스트로 나누기를 삽입 할 수

: https://jsfiddle.net/svArtist/6o5ao1bm/1/

+1

또한 키가 입력되면 false를 반환합니다. ... 뭔가를 삭제할 필요가 있다면'document.execCommand ('delete');를 사용하십시오. –

+0

js가 주석 처리 될 때 당신도 정확히 동일합니다 –

+0

@BenPhilipp 고마워,이 부분은 문제를 해결하고, document.execCommand ('pressUpArrowKey')와 같은 것이 있습니까? – ryanpika

관련 문제