2013-08-25 6 views
1

다음 코드를 가장 아름답게 장식하는 방법은 무엇입니까? .trigger는 많은에서 똑같은 일을 할 것jQuery에서 중복 코드 제거

$('#popup_settings_enable_name') 
.click(function() { 
    // ... 
}) 
.triggerHandler('click'); 

하는 것으로 :

$('#popup_settings_enable_name').click(function() { 
    $el = $('#popup_settings_name_field'); 
    if ($(this).prop('checked')) { 
     $el.removeAttr("disabled"); 
    } else { 
     $el.attr("disabled", "disabled"); 
    } 
}).each(function() { 
    $el = $('#popup_settings_name_field'); 
    if ($(this).prop('checked')) { 
     $el.removeAttr("disabled"); 
    } else { 
     $el.attr("disabled", "disabled"); 
    } 
}); 
+2

흠, http://codereview.stackexchange.com/에 더 적합 할 수도 있습니다. – j08691

답변

3

당신은 단순히 .triggerHandler 사용하여 설치 한 후 click 이벤트 핸들러를 트리거 할 수 있습니다 : 나는 중복 코드를 제거하고 싶습니다 경우가 있지만 .trigger.triggerHandler 사이에는 약간의 차이가 있습니다. 매뉴얼 페이지는 그것들에 대한 명확한 언급을한다.

0

당신은 간단하게 초기화를위한 핸들러를 실행하기 위해 이벤트를 트리거 할 수 있습니다

$('#popup_settings_enable_name').click(function() { 
    … 
}).click(); 
또 다른 방법은 바로 함수 선언 사용하는 것입니다

:

function update() { 
    // a little simplification: 
    $('#popup_settings_name_field').prop("disabled", !this.checked); 
} 
$('#popup_settings_enable_name').click(update).each(update); 
0

클릭 이벤트를 트리거 수동으로 의도하지 않은 가질 수 부작용 (click 이벤트가 할당 된 다른 대리자가있는 경우는 무엇입니까?)

duplicat 리팩토링을 제안합니다. ed 코드를 자체 메서드로 변환 한 다음 해당 메서드를 jQuery .click() 함수로 전달한 다음 jQuery .each() 함수로 전달하면됩니다.