2011-09-23 3 views
0

이 부분이 있다고 가정 해 봅니다.한 요소의 이벤트 처리기를 JS의 다른 요소에 연결하십시오.

<input id="text1" type="text" name="text1" onchange="alert('valueA');" /><br /> 
<input id="text2" type="text" name="text2" /><br /> 

는 내가하고 싶은 것하면 입력 = "텍스트 1"의 onchange를 이벤트 처리기를 얻고 다른 요소의 이벤트 "텍스트 2"에 연결하는 것입니다. 지금까지 괜찮습니다. DOM0 입력란에 "text1"을 입력하고 텍스트 2에 DOM2로 첨부 할 수 있습니다.

_handler= $('#text1')[0].onchange; 
      $('#text2').change(function (event) { 
      if (typeof _handler=== "function") { 
         _handler.call(this, event); 
      } 

하지만 문제는 "text2"에 연결하기 전에 일부 js 코드를 변경/추가하고 싶습니다. 예를 들어, "text2"에 첨부하기 전에 "alert ('valueA');" "alert ('valueA.This is text2')"; 어떻게 이것을 할 수 있습니까?
경고문은 예제 일 뿐이므로 경고 메시지를 전역 변수에 저장하고 변수의 값을 표시하는 등의 해결 방법을 제공하지 마십시오.

감사합니다.

답변

1

이 작업을 수행 할 수 없습니다. 함수 내부의 코드는 변경할 수 없습니다.

자바 스크립트 기능은 변경 가능한 객체이지만 속성 및 메소드 만 추가 할 수 있지만 '내부'코드는 변경할 수 없습니다. 당신이 다음 (당신이 코멘트에서 지정한대로), 당신은 문자열로 기능을 변환 할 수 악 eval를 사용하는 함수 내에서 당신이 원하는대로 텍스트 교체하고 싶다면


을 평가 후면 :

http://jsfiddle.net/A4w2W/

그러나, 이 작업을 수행하지 마십시오 제발, 제발 :

$('#text2').change(function (event) { eval( '(' + $('#text1')[0].onchange.toString().replace('valueA', 'valueB') + ')()' ); }); 

그리고 여기에는 바이올린입니다. 이것은 코드를 작성하는 최악의 방법입니다 !!
이 모든 문제에 대한 귀하의 접근 방식을 진지하게 고려해야합니다.

+0

동의 함. 나는 그들을 직접 바꾸지 않을 것인가? 내가 생각하고있는 것은 함수를 문자열로 변환하고 바꾸고 함수로 다시 변환하는 것입니다. 가능한가? eval()과 같은 뭔가 ?? – Kai

+0

감사합니다. 조셉. 저는 이미 다른 접근법을 사용했습니다. – Kai

-1

기술적으로 아니오. 그러나 다른 해결책이 있습니다.

<script type="text/javascript"> 
<!-- 
alertvalue = "valueA"; 
//--> 
</script> 
<input id="text1" type="text" name="text1" onchange="alert(alertvalue);" /><br /> 
<input id="text2" type="text" name="text2" /><br /> 
<script type="text/javascript"> 
$('#text2').change(function(event) { 
     alert(alertvalue + '. This is text2'); 
}); 
</script> 
+0

내 요구 사항은 무감각하게 들리지만 생각하는 것만 큼 단순하지는 않습니다. 내 교환 이벤트 처리기는 무엇이든 될 수 있습니다. 제 질문에서 언급했듯이, 예를 들어 경고문을드립니다. 때로는 alert() 일 수 있습니다. 때로는 표현이 될 수도 있습니다. – Kai

+0

그럼 내 솔루션은 여전히 ​​있습니다. 전역 변수 또는 클로저에서 작성된 변수를 사용하여 동적 함수를 가질 수 있습니다. 문자열을 평가하는 것은 비실용적이며 (매우 지저분 해 지므로) 매우 어렵습니다. 또한 많은 브라우저에서 문자열 평가가 느립니다. –

+0

제 질문을 신중하게 확인하는 경우 이미 전역 변수를 사용하는 것과 같은 솔루션을 제공하지 않겠다고 언급했습니다. 문자열 인식 이외의 다른 솔루션이 있다는 것을 알고 있습니다. 함수에 매개 변수를 작성하는 것과 비슷하게 다른 방식으로 동작하도록하려면 함수에 매개 변수를 전달하는 것과 같습니다. 그러나 어떤 이유로, 나는 그것을 적용 할 수 없다. – Kai

관련 문제