2012-03-17 3 views
2

저는 하루 종일 다양한 사이트를 검색해 왔지만 문제를 해결하는 데 도움이되는 수많은 답변을 발견했습니다.하지만 구현하는 데 문제가 있습니다. 해결책. 내가 뭘 하려는지에 대한 간단한 개요 :JavaScript window.getSelection()은 알아낼 수 없습니다.

  1. 저는 리치 텍스트 에디터를 만들었습니다.
  2. 첨부 된 서식이있는 "붙여 넣은"데이터를 올바르게 처리해야합니다.
  3. onpaste = "return false"를 통해 붙여 넣기를 사용하지 않도록 설정했습니다.
  4. Ctrl + V에서 숨겨진 텍스트 영역에 포커스가 주어지면 텍스트가 사용자 옆에 붙여 넣어 진 다음 textarea.value가 찍히고 편집기 (contentEditable div)로 복사됩니다.
  5. IE에서는이 작업을 수행 할 수 있지만 나머지 작업은 수행 할 수 없습니다.

내 문제는 window.getSelection() 객체가 표준 준수 브라우저에서 작동하는 방식을 이해하지 못한다는 것입니다. 내가 원하는 것은 새로 붙여 넣은 textarea.value가 포커스와 커서 (캐럿) 위치가 유지 된 상태에서 JavaScript를 통해 내 편집기에 복사되는 것입니다. 따라서 깜박이는 커서는 붙여 넣기 끝 부분에 남아 있어야합니다.

function handle_paste_keydown(key) 
{ 
    if(
     (key.keyCode == 86 || key.charCode == 86) && 
     (key.keyCode == 17 || key.charCode == 17 || key.ctrlKey) // if "Ctrl+V" is pressed. 
    ) 
    { 
     var get_paste_selection_range; 

     if(document.selection) 
     { 
      get_paste_selection_range = document.selection.createRange();     
      document.getElementById("paste_textarea").style.display = "block"; 
      document.getElementById("paste_textarea").focus();    

      document.getElementById("paste_textarea").onkeyup = function() 
      { 
       // insert the .value of the textarea at the cursor position in the editor. 
       get_paste_selection_range.text += document.getElementById("paste_textarea").value;    
       document.getElementById("paste_textarea").style.display = "none"; 

       // retain focus and cursor position      
       get_paste_selection_range.select();   
      } 
     } 
     else if(window.getSelection())  
     { 
      document.getElementById("paste_textarea").style.display = "block"; 
      document.getElementById("paste_textarea").focus(); 

      document.getElementById("paste_textarea").onkeyup = function() 
      { 
       // How do I handle this? 
       document.getElementById("paste_textarea").style.display = "none"; 
      } 
     } 
    } 
document.getElementById("paste_textarea").value = ""; 
} 

등나무 누군가 도움 :

나는 나머지를 IE에서이 목표를 achives 다음 코드를 작성하지만,하지? 감사!

편집 : 진행중인 버전을 볼 수 있도록 라이브 버전에 대한 링크를 추가했습니다. 다른 브라우저뿐만 아니라 Internet Explorer에서도이 기능을 사용해보십시오. 그러면 무슨 일이 일어나는지 정확하게 볼 수 있습니다. 참고 : Ctrl + V에서 숨겨진 텍스트 영역을 볼 수있게하여 상황을보다 잘 볼 수 있도록하고 Ctrl + V 키를 누른 상태로 화면에 상자를 유지합니다.

http://gameprogrammingworkshop.com/Java/Stack%20Overflow%20Error!/index.php?id=null

답변

0
... 
else if (window.getSelection) { 
    var selection = window.getSelection(), 
     get_paste_selection_range = selection.getRangeAt(0); 
    var new_text = selection.toString() + document.getElementById("paste_textarea").value; 

    // retain your focus 
} 
+0

안녕하세요. 귀하의 회신에 감사드립니다. 그러나 코드를 작동시킬 수는 없습니다. 나는 지금 몇 시간 동안 노력해 왔고 무엇을해야할지 모른다. 저는 JavaScript에 초보자인데 원래 코드에 대한 링크가 포함 된 원본 게시물을 편집 했으므로 어떤 일이 벌어지고 있는지 그리고 무엇을 성취하려고하는지 정확하게 볼 수 있습니다. 볼 수 없거나 보이지 않으려면 시간 내 주셔서 감사합니다. – George88

관련 문제