2016-12-30 15 views
0

私はさまざまな機能を持つ動的なプラグインを持っていますが、私はクリックイベントでこれらの機能を起動しています。複数のjQuery .on()を1つに置き換えます

マイHTML:

<div class="container"> 
    <div class="el" id="el1"> 
     <a href="#" class="edit-el">Edit</el> 
     <a href="#" class="delete-el">Delete</el> 
    </div> 
</div> 

これは私のjavascriptです:

// Edit an el 
$('.container').on('click', '.edit-el', function(e){ 
    var elId = $(e.currentTarget).closest('.el')[0]; 
    plugin.editEl(elId); 
}); 
// Delete an el 
$('.container').on('click', '.delete-el', function(e){ 
    var elId = $(e.currentTarget).closest('.el')[0]; 
    plugin.deleteEl(elId); 
}); 

質問:それは、このコードを最適化することが可能ですので、私は2人のクリックイベントリスナーを持っていないのですか?

$('.container').on('click', function(e){ 
    var control = e.currentTarget; 
    if (control == '.edit-el') { 
     plugin.editEl(elId); 
    } 
    if (control == '.delete-el') { 
     plugin.deleteEl(elId); 
    } 
}); 
+0

私は、分離分離の原則のために、複数の別々のイベントハンドラを使用します。 'e.currentTarget'の代わりに' this'を使うのは簡単です – Satpal

答えて

2

に既存のアプローチに固執することをお勧めいたしますでしょうしかし、私はつもりはないを使用することができます

$('.container').on('click', function(e){ 
    var control = $(e.target); 
    if (control.hasClass('edit-el')) { 
     plugin.editEl(elId); 
    } 
    else if (control.hasClass('delete-el')) { 
     plugin.deleteEl(elId); 
    } 
}); 
+0

あなたは正しいと思います。理由は、アイコンの別のスパンをアンカーリンクに追加すると、e.currentTargetが不正確になります。私の現在のバージョンのコードとは別に、それに固執する回避策があるとは思わないので、それに固執するつもりです。ありがとう! – aman704

+0

この場合、単一のイベントハンドラは正しいアプローチではありません。編集と削除の両方、またはクリックだけでリンクがクリックされた後、さらに適切なアクションがディスパッチされます。したがって、ここでは何も混合されておらず、編集と削除は 'pluginで完全に分離されています。 'レベルです。このケースでは、別々のイベントハンドラを持つことは間違っており、あまり最適ではありません。 – dfsq

2

は、このコードを試してみてください。これは私が(を動作していない)を達成しようとしているかのアイデアを与える必要があります。それはhrefあなたは.is()

$('.container').on('click', function(e){ 
    var control = $(e.target); 
    if (control.is('.edit-el')) { 
     plugin.editEl(elId); 
    } 
    else if (control.is('.delete-el')) { 
     plugin.deleteEl(elId); 
    } 
}); 

私が原因separation of concerns原則

2

だ比較対象の要素を取得します。最適化されたコードでこの質問に答えるには、のコードが既に最適であると思うからです。です。理由は単純なフレーズ - 懸念の分離 - に至りました。 Wikipediaから:コンピュータサイエンスの

、懸念(SoC)のの分離は、各セクションは別々の懸念に対処するように、個別のセクションにコンピュータプログラムを分離するための設計原理です。現時点では

、次の2つの完全に独立した機能の領域があります。

  • 要素
  • 要素の削除を管理し、イベントハンドラの編集を管理し、イベントハンドラを

同じハンドラの下で両方を持つことによって得られる "利益"は、あなたのコードが少し短くなるということです。その代わりに、2つの完全に異なる機能を1つの手順に組み合わせ、可読性と保守性の両方に影響を与えます。

関連する問題