2009-08-05 5 views
2

textarea 요소에서 keydown 이벤트를 트리거하는 방법을 알 수 없습니다. 두 textarea 요소가 있다고 상상해 보겠습니다. 첫 번째 상자에 뭔가를 입력하면 두 번째 상자에 입력 내용이 표시되기를 원하지만 특정 이유 때문에 이벤트를 통해 입력해야합니다. 이것은 내가 시도한 것이며 작동하지 않습니다.키 코드를 <textarea> 요소로 보내는 자바 스크립트

<script language="javascript" type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.js"></script> 

<textarea id='first'></textarea> 
<textarea id='second'></textarea> 

<script> 
    jQuery("#first").keydown(function(event) 
    { 
     var keydown = jQuery.Event("keydown") 
     keydown.keyCode = event.keyCode 
     keydown.which = event.which 
     jQuery("#second").trigger(keydown) 
    }) 
</script> 

어떻게 생각하나요?

답변

0

Here's an example : 분명히 텍스트 영역의 value 속성에 추가합니다. 당신이 데이터 살균하지 않으려면 http://jsbin.com/ivulu

을 또는 :

$(document).ready(function() { 
var $comment = ''; 
$('#first').keyup(function() { 
    $comment = $(this).val(); 
    $comment = $comment.replace(/<\/?[^>]+>/g,"").replace(/\n/g, "<br />").replace(/\n\n+/g, '<br /><br />'); // this strips tags and then replaces new lines with breaks 
    $('#second').html($comment); 
}); 
}); 

근무 데모 :

1

이 시도 http://jsbin.com/oposu

$(document).ready(function() { 
var $comment = ''; 
$('#first').keyup(function() { 
    $comment = $(this).val(); 
    $('#second').html($comment); 
}); 
}); 
+1

이벤트 핸들러를 발사, 나는 이벤트를 통해 그것을해야한다. 왜 그런 길을 가야만 하는가? –

0

를 keyDown 이벤트는 사실에 대해 책임을지지 않습니다 텍스트 상자의 값을 업데이트합니다. 코드는 잘 작동하지만 두 번째 텍스트 상자에 이벤트 핸들러가 없으므로 아무런 문제가 발생하지 않습니다. 텍스트 상자의 텍스트를 업데이트하려면 jyoseph에서 보여준 것처럼 값을 변경하십시오.

이벤트를 트리거해야하는 경우 (이유가있을 경우) 작성한 코드가이를 수행합니다.

+0

ok, 여기 실제 문제가있다. keydown에 대해 내가 누른 키가 보이는 문자를 생성하는지 알아야한다. "a"를 누르면 "a"가 표시되지만 화살표 키를 누르면 텍스트 상자에 아무 것도 변경되지 않습니다. 그래서 내가 뭘 하려는지 동적 도우미 텍스트 상자를 만들고 첫 번째 상자의 keypress 처리기에서 해당 동적 상자에 이벤트를 다시 보내고 값 변경 여부를 확인하는 것입니다 ... 나는 키가 안정적으로 검색하는 다른 방법을 참조하십시오 눌려진 문자 또는 특수 키입니다 (ALT + <일부 다중 숫자 코드>의 조합으로 보이는 특수 문자가 생성됩니다 - 그 밖의 방법은 무엇입니까?) –

+0

"보이지 않는"키 코드의 목록을 유지하는 것이 가장 좋습니다. http : // aspdotnetfaq와 같은 목록.com/Faq/Key-of-the-the-the-the-of-KeyCodes-for-JavaScript-KeyDown-KeyPress-and-KeyUp-events.aspx)를 사용하고 명시 적으로 무시하십시오. 이벤트 만 사용하여 텍스트 상자의 내용을 수정할 수는 없으며, 이벤트는 대화식 컨트롤과 관련하여 "타기"를위한 것입니다. 조금 더 뒤돌아서 왜 보이는 키 코드와 보이지 않는 키 코드를 구별해야합니까? –

+0

그건 그렇고, ALT + (숫자) 높은 ASCII 문자에 대한 키 코드를 보내지 않을 것입니다 실제로 키 코드의 시퀀스, 각 키 (ALT, 숫자, 숫자 등)에 대한 하나의 시퀀스를 보내드립니다 –

2

이벤트가 전송 브라우저 그냥

모든 브라우저가 (내가 아는) 당신이 이벤트를 전달하는 것을 허용하지 않음 (즉, 텍스트 영역에 문자를 넣어) 그것에 반응하지 않는, 그냥 실행되지 . 하지만 그 일을하더라도 완벽하지는 않습니다.

// Gecko only 
$("#first").keypress(function(event) 
{ 
    var evt = document.createEvent('KeyEvents'); 
    evt.initKeyEvent(
     event.type 
    , event.bubbles 
    , event.cancelable 
    , event.view 
    , event.ctrlKey 
    , event.altKey 
    , event.shiftKey 
    , event.metaKey 
    , event.keycode 
    , event.charCode 
); 
    $('#second')[0].dispatchEvent(evt); 
}); 

이 예제를 사용하면 완벽 함과는 거리가 멀다는 것을 알 수 있습니다. 기본적으로, 당신이 요구하는 것을하는 방법은 당신이 말할 수없는 방식입니다 - 가치에 의해서. 이

$("#first").bind('keyup change', function(event) 
{ 
    $('#second').trigger('mimic', $(this).val()); 
}); 
$("#second").bind('mimic', function(event, value) 
{ 
    $(this).val(value); 
}) 

이 충분히 있다는 좋은처럼

그러나 보이는 솔루션에 이르게 이벤트와 함께 사용자 정의 데이터를 전달할 수 있습니다?

-1

클라이언트 머신에서 이벤트를 "생성"할 수 없습니다. 잠재적 인 보안 취약점을 상상할 수 있습니까? 그것은 생각할 필요가 없습니다. 당신이 할 수있는 유일한 것은 내가 질문에 명시된 바와 같이, 난 그냥 두 번째로 첫 번째 상자의 값을 할당 할 수 없습니다 ...

textarea2.onkeydown(); 
관련 문제