2011-02-01 5 views
4

현재 Android 브라우저에서 트윗을 볼 수있는 간단한 웹 애플리케이션을 작성 중입니다. 나는 현재 텍스트 뒤에 캐럿 초점을이 코드를 사용하고 있습니다 :이 코드는 사파리 도중 크롬, 유체, 오페라, 파이어 폭스에서 완벽하게 작동Android 브라우저에서 텍스트 뒤에 캐럿이있는 포커스 텍스트 영역

var oldContent = document.tweetBox.tweet.value; 
document.tweetBox.tweet.value = ''; 
document.tweetBox.tweet.focus(); 
document.tweetBox.tweet.value = oldContent + to; 

합니다.
가장 이상한 부분은 하드웨어 키보드를 사용하면 'to'텍스트 이후 커서가 깜박이기 시작하지만 입력 한 텍스트는 위의 JS가 실행되기 전에 입력했던 곳에서 시작됩니다.
소프트 키보드를 사용하는 경우 텍스트 입력은 텍스트 영역의 시작 부분에서 시작됩니다.

p.s 자바 스크립트는 추종자를위한 제안의 일부이므로 @gn을 입력하기 시작하면 별도의 div에 @gnur_nl을 제안하고 Enter를 누르면이 항목이 선택됩니다.

업데이트 :이 동작은 브라우저 버그, a bug report has been filed의 결과 인 것으로 보입니다.

+3

한 설정을 수동으로 caret의 위치를 ​​설정하십시오. 당신은 Caret를 의미 했습니까 – Jamiec

+0

Hihi, 방금 그것이 그것이 당근처럼 발음했던 네덜란드의 collegae에 의해 "caret"이라고 이름이 지어 졌던 것을 배웠다. – gnur

+1

올바른 발음입니다 ... –

답변

0

소리가 브라우저 버그와 유사합니다.

var textArea = document.tweetBox.tweet, oldContent = textArea.value; 
textArea.value = oldContent + to; 
textArea.focus(); 
textArea.selectionStart = textArea.selectionEnd = textArea.value.length; 
+2

예, 가장 확실한 브라우저 버그입니다. 그러나 나는 임시 해결책을 원한다. 불행히도이 방법으로는 해결되지 않습니다. 캐럿이 올바른 위치에서 깜박이고 텍스트 입력이 잘못된 위치에서 시작됩니다. – gnur

+0

@gnur : 확인하기 만하면 실제로 시도해 보셨습니까? –

+0

@gnur : 충분합니다. Android 기기가 없으므로 테스트 할 필요가 없으므로 도움이되지 않습니다. –

0
setCaret = function(obj,pos) { 
    // IE Support 
    if (document.selection) { 

     // Set focus on the element 
     obj.focus(); 

     // Create empty selection range 
     var oSel = document.selection.createRange(); 

     // Move selection start and end to 0 position 
     oSel.moveStart ('character', -obj.value.length); 

     // Move selection start and end to desired position 
     oSel.moveStart ('character', pos); 
    } 

    //standard browsers 
    else if (obj.selectionStart || obj.selectionStart == '0') { 
     obj.selectionStart = pos; 
     obj.selectionEnd = pos; 
     obj.focus(); 
    } 
}; 

를 오른쪽 위치 나 당근과 킥킥 만들기위한

setCaret(document.getElementById("area"),document.getElementById("area").value.length);