2014-07-27 2 views
0

몇 주 전에 나는 자신의 .on ('click'.. 핸들러가있는 HTML DOM 객체에 버튼을 동적으로 추가 할 수 있었고 e.stopPropgation을 사용하여 새로운 자식을 중지 할 수있었습니다. 요소가 이벤트를 발생시키지 못하도록합니다.자바 스크립트에서 괄호없이 함수 호출

내가 수행 한 이상한 일은 괄호없이 함수를 호출하는 것이 었습니다. 왜이 작업을했는지, 왜 작동하는지 또는 괄호를 첨부 할 때 작동하지 않는 이유는 알 수 없습니다. . 나는 우연에 의해 일을하고 있는지 알고하지 설계 (지금은 그것에 주석을 추가합니다)에

을이 같은 간다 :

//Container is the parent element 
// var buttons stores the buttons with class 'buttons' 
$('.container').on('click', function(){ 
    $(buttons).appendTo($(this)).fadeIn(500).find('.buttons').click(tableButton); 
}); 

function tableButton(e){ 
    e.stopPropagation(); 
    //do stuff 

} 

왜 arguements가없는 tableButton에 대한 호출을 작성했는지 또는 왜 완벽하게 작동하는지 알 수 없습니다. 문법을

.find('.buttons').on('click', function(e){ 
    tableButton(e); 
}); 

으로 변경하려고 시도했지만 더 이상 작동하지 않습니다.

도움을 주셨습니다.

+0

'myFunction.call()가' –

답변

1
당신이 클릭 핸들러에 함수를 전달하는 것이 아니라 그합니다 (()) 예 직접 함수를 호출하고 있기 때문에 의미가 있습니다

:

var testFunction = function(msg) { 
    alert(msg); 
} 

var functionCaller = function(functionToCall) { 
    functionToCall('hello!'); 
} 

functionCaller(testFunction); 

functionCaller가 testFunction에 메시지 인수를 (통과) (인수없이) functionCaller에 대해서만 testFunction을 전달합니다.

작동하지 않는 부분에 대해서는 tableButtons() 대신 함수 이름 tableButton()이 아닙니까?

당신은 실제로 그것을 호출하지 않는 당신이 그냥 그것을 받아들이는 인수를 선언 http://jsfiddle.net/g2PAn/

+0

이는 것 같아 정말 복잡한 방식으로 일을합니다. 어떤 이유가 있을까요? – user3822370

+0

예. 그것은 당신이 대리인으로서 당신의 기능을 사용할 수있게 해줍니다. 예를 들어, 동일한 클릭 핸들러를 사용하여 여러 번의 클릭 이벤트에 연결할 수 있습니다. – int21h

1

를 참조하십시오. 클릭 콜백은 실제로는 인수로 호출되지만 사용자는 호출하지 않습니다.

문제는 아마도 요소가 this로 구속 클릭 된와 jQuery를 당신은 다음과 같이 테이블 버튼을 부를 수, 함수를 호출한다는 사실에서 유래

:

.find('.buttons').on('click', function(e){ 
    tableButton.call(this, e); 
}); 
+0

그렇다면 논쟁의 여지가 있지만 나로 인한 것이 아니라는 것은 무엇을 의미합니까? 올바르지 않거나 부적절한 구문입니까? – user3822370

+1

@ user3822370 업데이트 됨 – axelduch

관련 문제