2012-04-06 2 views
1

두 번의 클릭 이벤트가 있습니다. 거의 유사하지만 매우 유사합니다. 나는 최선을 리팩토링하는 방법에 대해 궁금 :리팩토링 자이 자바 스크립트 코드

$('.remove_fields.dynamic').live('click', function(e) { 
    var $this = $(this); 
    var after_removal_trigger_node = $this.closest(".nested-fields").parent(); 
    trigger_removal_callback($this); 
    e.preventDefault(); 
    $this.closest(".nested-fields").remove(); 
    trigger_after_removal_callback(after_removal_trigger_node); 
    }); 

    $('.remove_fields.existing').live('click', function(e) { 
    var $this = $(this); 
    var after_removal_trigger_node = $this.closest(".nested-fields").parent(); 
    trigger_removal_callback($this); 
    e.preventDefault(); 
    $this.prev("input[type=hidden]").val("1"); 
    $this.closest(".nested-fields").hide(); 
    trigger_after_removal_callback(after_removal_trigger_node); 
    }); 

당신은 중복의 공정한 비트가 말할 수. 가장 좋은 방법은이 코드를 리팩터링하는 것이 무엇인지 궁금합니다.

+1

1 단계 :'.live 사용하지 마십시오()'. 사용되지 않습니다. –

답변

4

.remove_fields 클릭 기능으로 수업을 확인하십시오.

$('.remove_fields').click(function(e) { 
    var $this = $(this); 
    var after_removal_trigger_node = $this.closest(".nested-fields").parent(); 
    trigger_removal_callback($this); 
    e.preventDefault(); 
    if($this.hasClass("dynamic") { 
     $this.closest(".nested-fields").remove(); 
    } else if($this.hasClass("existing")) { 
     $this.prev("input[type=hidden]").val("1"); 
     $this.closest(".nested-fields").hide(); 
    } 
    trigger_after_removal_callback(after_removal_trigger_node); 
}); 
+0

'trigger_after_removal_callback'은 두 경우 모두 공통적이며, 아래쪽에 인수로 표시 할 수 있습니다. – Joseph

+0

@Joseph : 예, 할 수 있습니다. 지적 해 주셔서 감사합니다. –

3

선택기를 $('.remove_fields.dynamic, .remove_fields.existing')에 결합하십시오.

그런 다음 $this이 클래스 existing 인 경우 테스트하십시오. 그렇다면 $this.prev("input[type=hidden]").val("1");을 실행하십시오.

완료.

1

복용 좀 더 청소 :

$('.remove_fields').click(function(e) { 
    e.preventDefault(); 

    var $this = $(this); 
    var $nestedFields = $this.closest(".nested-fields"); 

    trigger_removal_callback($this); 

    if($this.hasClass("dynamic") { 
     $nestedFields.remove(); 
    } else if($this.hasClass("existing")) { 
     $this.prev("input[type=hidden]").val("1"); 
     $nestedFields.hide(); 
    } 

    trigger_after_removal_callback($nestedFields.parent()); 

});