2013-10-30 3 views
0

나는 내 질문에 대한 답변을 꽤 많이 보았지만 비슷한 점은 아직 발견하지 못했습니다. 본질적으로, 나는 이벤트를 받아들이고 일반적으로 클릭이나 다른 이벤트를 통해 요소에 첨부되는 함수를 호출하려고하지만 대신 직접 호출해야합니다. 본질적으로코드로 함수에 이벤트 객체 전달

는, 나는이 (jQuery를 작성) 내 함수를 호출 할 수 있다는 사실을 알고 :

function updateThisValue(event) { 
    ...some code... 
} 

jQuery('#myElement').on('click', updateThisValue); 

jQuery('#myElement').trigger('click'); 

방법은 함수를 직접 호출하는 대신에,이 있습니까? 컨텍스트에 대한

function updateThisValue(event) { 
    ...some code... 
} 

updateThisValue(***jQuery event object here***); 

, 나는 웹 페이지에 양식을 업데이트 백본을 사용하고, 특히 이벤트에 대한 메서드 (updateThisValue) 중 하나를 호출하기 위해 정의 된 사용자 정의보기를 정의했습니다. 동일한 뷰의 다른 메서드 내에서 "updateThisValue"메서드를 직접 호출 할 수 있기를 원합니다. 그러나 "updateThisValue"는 해당 코드 내에서 이벤트 객체를 사용합니다. 따라서 메서드를 직접 호출하면 오류가 발생하여 오류가 발생합니다.

이 방법이 있습니까? 아니면 내가 할 수있는 일을 (코드에 따라) 수동으로 트리거해야합니까? 단지 해킹처럼 느껴진다.

감사합니다.

+0

당신이 이벤트 객체의 어느 부분이 필요합니까 :

또한 이벤트 바인딩 호출 내부 인라인 익명 함수로 updateThisValueUsingEvent을 정의 할 수 있습니다? 어쩌면 당신은'updateThisValue ({target : })'와 같은 것을 사용할 수 있습니다. – Andreas

+0

updateThisValue는 이벤트 객체와 어떤 관계가 있습니까? Javascript는 동적 언어이므로 액세스되는 속성 및 함수와 관련하여 jQuery 이벤트 객체처럼 "보이는"경우 객체를 전달할 수 있습니다. (http://en.wikipedia.org/wiki/Duck_typing) –

답변

0

, 그 방법은 가능성에 정의해서는 안 : 당신이 updateThisValue에서 this에 대한 참조를 필요로하지 않는 경우에 당신은 그냥 간단하게 다음과 같은 작업을 수행 할 수 이벤트를 직접 처리하는 방법.

function updateThisValue(arg0, arg1, arg2, ...) { 
    ... some code ... 
} 

function updateThisValueUsingEvent(event) { 
    // do nothing except extract the necessary values from event 
    updateThisValue(event.target, event.which); 
} 

jQuery('#myElement').on('click', updateThisValueUsingEvent); 
// direct invocation: 
updateThisValue($(selector)[0], 2); 

updateThisValue 함수는 컨트롤러의 일부입니다. updateThisValueUsingEvent는 뷰에서 컨트롤러로의 바인딩입니다. 특히 값을 업데이트하여 모델을 직접 처리하는 것처럼 들리므로 View/Controller 얽힘을 분리해야합니다.

jQuery('#myElement').on('click', function(e) { 
    updateThisValue(e.target, e.which); 
}); 
+0

아, 너 천재 야. 이것은 내가해야하는 일입니다.저는 MVC 구조 전체에 익숙하지 않고 매우 복잡하고 부분적으로 얽힌 자바 스크립트 코드를 상속하여 업데이트했습니다. 고마워, 마이크. –

1

HAVE jQuery 이벤트 객체 인 경우에만 updateThisValue을 jQuery 이벤트 객체와 호출 할 수 있습니다.

그래서 당신은이 작업을 수행 할 수 있습니다

var updateThisValue = function(e) { 
//... 
} 

//The below two pieces of code are equivalent. 
$('#myelement').on('click',updateThisValue); 

$('#myelement').on('click',function(e) { 
    updateThisValue.apply(this,[e]); 
}); 

내가 두 번째 코드 샘플에서 .apply()을 사용하고 단지 updateThisValue(e)하지 않은 것은 바로 당신이에 this에 대한 참조를 사용하고자하는 경우에 왜 유일한 이유 updateThisValue 함수 (이 이벤트를 처리 한 dom 노드를 나타냄). 당신은 자신이 직접 메소드를 호출 할 필요 발견하면

$('#myelement').on('click',function(e) { 
    updateThisValue(e); 
}); 
관련 문제