2012-03-25 6 views
7

내가 텍스트 필드에서 값을 읽을 때 해당 onpaste 함수를 호출 할 때 필드 (붙여 넣기 작업 전에 하나의 값)가 아닌 새 값 (붙여 넣기 이후 조작). http://jsfiddle.net/qsDnr/붙여 넣기시 텍스트 입력란의 새로운 값을 가져 오는 방법은 무엇입니까?

코드의 사본은 다음과 같습니다 :

<!DOCTYPE html> 
<html> 
<head> 
<title>On Paste</title> 
<script type="text/javascript"> 
var textareaElement; 
var previewElement; 

function update() 
{ 
    previewElement.innerHTML = textareaElement.value; 
} 

window.onload = function() { 
    textareaElement = document.getElementById('textarea'); 
    previewElement = document.getElementById('preview'); 
    textareaElement.onpaste = update  
} 
</script> 
</head> 
<body> 
<textarea id="textarea"> 
</textarea> 
<div id="preview"> 
</div> 
</body> 
</html> 

은 다음 단계로 동작을 확인할 수 있습니다 여기에

이 동작의 데모입니다.

  1. 문자열 foo을 클립 보드에 복사하십시오.
  2. 텍스트 영역을 마우스 오른쪽 버튼으로 클릭하고 '붙여 넣기'를 선택하십시오. div 요소에 아무것도 표시되지 않습니다.
  3. 텍스트 영역을 마우스 오른쪽 버튼으로 클릭하고 '붙여 넣기'를 다시 선택하십시오. foo이 div 요소에 나타납니다. 난 항상 붙여 넣기 작업과 텍스트 영역 요소에 업데이트 된 것을 표시하기 위해 div 요소를 원하기 때문에

는 원하는 출력은 2 단계 각각 3 단계에서 foofoo foo입니다. 원하는 출력을 얻을 내가 관리해야

한 가지 방법은 그래서 대신 내가

textareaElement.onpaste = function() { 
    window.setTimeout(update, 100); 
}; 

이 시간 (데모 가지고

textareaElement.onpaste = update  

의, window.setTimeout()update() 함수 호출을 지연하는 것입니다 : http://jsfiddle.net/cwpLS/). 이것은 내가 원하는 것을 해낸다. 그러나 이것은 내가 원하는 것을 직접적으로 수행하는 것보다는 해결 방법과 같이 느낀다. 이 작업을 수행 할 수있는 다른 방법이 있는지 알고 싶습니다.

+0

[이 이벤트] (https://developer.mozilla.org/en/DOM/element.onpaste)는 사용자가 텍스트를 붙여 넣으려고 할 때 보내집니다 - 텍스트를 붙여 넣기 전에 onpaste가 트리거 될 수 있습니다. – Joseph

+0

'event.clipboardData.getData ('text/plain')'붙여 넣기는 가능하지만 모든 브라우저 및 현재 텍스트에서 사용할 수 있는지 잘 모르며 선택도 고려해야합니다. 시간 초과를 사용하거나 onkeyup/onmouseup을 추적해야합니다. – kirilloid

+0

@Joseph 동의합니다.나는이 문제를 해결할 더 좋은 방법이 있는지, 내가이 문제에서 설명했듯이, 해결하려고하는 문제가'setTimeOut'으로 가장 잘 해결되는지를 파악하려고 노력하고있다. –

답변

3

나는 setTimeout 솔루션이 원하는 효과를 얻거나 클립 보드 객체에 액세스하는 유일한 방법이라고 확신합니다. 브라우저 간 호환을 위해 & 이전 브라우저를 사용하는 경우 지저분해질 수 있습니다.

0

크로스 브라우저에서 직접 할 방법이 없습니다. firefox의 동작에 대해서는 아래 링크를 참조하십시오.

Mozilla

현재 붙여 넣은 텍스트를 취득 할 DOM-유일한 방법이 없다; 해당 정보를 얻으려면 nsIClipboard를 사용해야합니다.

또한 다른 가능성에 대해 논의하는 stackoverflow link을 살펴보십시오.