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);
  });

ご覧のとおり、かなりの重複があります。このコードをリファクタリングするための最良/最も良い方法は何だろうと思っています。

4

3 に答える 3

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);
});
于 2012-04-06T22:58:51.990 に答える
3

セレクターを に結合し$('.remove_fields.dynamic, .remove_fields.existing')ます。

次に、$thisクラスがあるかどうかをテストしexistingます。その場合は、実行し$this.prev("input[type=hidden]").val("1");ます。

終わり。

于 2012-04-06T22:57:19.680 に答える
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());

});
于 2012-04-06T23:25:46.187 に答える