2011-09-11 5 views
0

클릭 이벤트를 처리하는 명명 된 함수 내에서 CSS 속성을 변경하고 싶습니다. click 이벤트에 정의 된 익명 함수에서 .css를 호출하면 작동합니다. 그러나, 나는 .css를 핸들러 함수 내에 정의 된 명명 된 함수 안에 호출하려고합니다. 여기 내 코드가있다..css 함수가 핸들러 함수 내에서 작동하지 않습니다.

$(document).ready(function() { 
    $('#popup').click(partial(coolTransition, $(this))); 
}); 

function coolTransition(elem) { 
    shrink(); 

    function shrink() { 
     elem.css('background-color', '#000000'); 
    } 
} 

//used to implement partial function application so that I can pass a handler reference that takes arguments. 
//see http://stackoverflow.com/questions/321113/how-can-i-pre-set-arguments-in-javascript-function-call-partial-function-applic 
function partial(func /*, 0..n args */) { 
    var args = Array.prototype.slice.call(arguments, 1); 
    return function() { 
     var allArguments = args.concat(Array.prototype.slice.call(arguments)); 
     return func.apply(this, allArguments); 
    }; 
} 

미리 도움을 청하십시오.

+1

두 번째 줄에는 'this'가 무엇을 의미합니까? –

답변

2

:

$(document).ready(function() { 
    $('#popup').click(partial(coolTransition, $(this))); 
}); 

$(this)$(document)입니다. 당신은 $('#popup')의 맥락에 걸릴 $(this) 필요하고,이를 위해 당신이 기능이 필요합니다 또는

$(document).ready(function() { 
    $('#popup').click((function() { 
     return partial(coolTransition, $(this)); 
    })()); 
}); 

을, 당신은 단지 $(this) 완전히 방지 할 수 있습니다

$(document).ready(function() { 
    var $elm = $('#popup'); 
    $elm.click(partial(coolTransition, $elm)); 
}); 

을 정말의 생각,이 모든 사용 partial은 지나치게 복잡해 보입니다. 왜 니가 필요하다고 생각하니? 가장 쉬운 접근법은 다음과 같습니다.

$(document).ready(function() { 
    $('#popup').click(function() { 
     coolTransition($(this)); 
    }); 
}); 
+0

인수를 사용하여 참조로 함수를 전달하도록 partial을 사용했습니다. 나는 다른 스택 오버플로 포스트에서 그것을 찾았지만, 당신이 한 것은 훨씬 더 깨끗합니다. 그래서 그것을 사용할 것입니다. 감사! – Vish

+0

@Vish : 그렇습니다. 다른 함수 표현식에서 함수 호출을 래핑하면됩니다. :) 나는 이것을 입증하기 위해 나의 대답을 편집했다. –

2

$(this)은 (는) 두 번째 줄에서 무엇을 말하고 있습니까? $('#popup')이 아닙니다. 당신이 그것을 참조하려면 먼저 참조를 만들 수 있습니다

$(document).ready(function() { 
    var $popup = $('#popup'); 
    $popup.click(partial(coolTransition, $popup)); 
}); 

partial이 필요하지 않습니다 사용하여 말했다. 당신은 또한 할 수 :

Btw는

$('#popup').click(function() { 
    coolTransition($(this)); 
}); 

또는

$('#popup').click(function() { 
    $(this).css('background-color', '#000000'); 
}); 

그리고 많은 다른 방법이를 .... 정의 shrinkcoolTransition 안쪽에 불필요한 것 같습니다. 이유가 없으면하지 마십시오. 에서

관련 문제