2012-04-06 6 views
1

私は2つのクリックイベントを持っていますが、それはほぼ同じですが、かなりです。私はそれらを最もよくリファクタリングする方法を考えています:リファクタリングこのjavascriptコード

$('.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()); 

}); 
関連する問題