2016-12-16 6 views
1

on_click_behaviourという機能をクリックするとid="original"要素のセレクタがあり、すべての動作またはクリックを模倣/継承するために別のセレクタid="other"が必要です。セレクタをjQueryの別のものと同じように動作させる

は、どのように私は私がotherセレクタをクリックすると、それは同様on_click_behaviourをトリガするようにotherセレクタがoriginalからのすべての機能を継承することができますか?

// can not touch this code as it's core 
 
$("#original").click(function() { 
 
    on_click_behaviour(); 
 
});
<div id="original">close window</div> 
 

 
<div id="other">close same window</div>

私はこのような何かを探しています:

$("#other").inherit_behaviours_from("#original"); 
+2

機能を含めることはできません。 –

+1

あなたが説明していることは本当に意味をなさない。セレクタは関数をトリガすることはできず、 'id =" original "はセレクタではなく属性です。セレクタはビヘイビアを模倣することも、ビヘイビアを継承することもできません。セレクタは何もしない*文字列*です。あなたに何を持っているのか、達成しようとしていることのデモンストレーションとしていくつかのコードを示してください。 – meagar

+0

セレクタはクリック機能を起動しません –

答えて

3

あなたはちょうどあなたが「オリジナル」の要素をクリックしたときに起こると、それは「オリジナル」と「他の間で異なっているすべての変数を必要としない機能を使用する必要がある場合このソリューションを使用することができます。 それほどよく見えませんが、うまくいきます。自分の名前の文字 -

$("#other").click(function() { 
 
    $("#original").click(); 
 
});

3

あなたはひどくあなたの用語をmuddlingています。

  • セレクタは
  • セレクタが
  • 継承がここ
  • には適用されませんイベントをトリガすることはできませんあなたは、セレクタをクリックすることができないページ上の0以上の要素にマッチ文字列ある

あなたがやっていることは、セレクタを使って要素を見つけ出し、その要素とのやりとりによって引き起こされるイベントに関数をバインドすることです。

を実行しようとすると、を実行しようとすると、同じ動作が2番目の要素にバインドされます。

追加の要素に同じハンドラを追加するには、最初の要素に加えて2番目の要素を選択するだけです。あなたは、カンマで区切られた2つのセレクタを、追加することによってそれを行うことができます。

$('#original, #other').click(function() { 
    behavior(); 
}) 

これはid="original"を持つ要素とid="other"を持つ要素を選択し、それらの両方に同じclick -handling機能をバインドします。

+0

これは正しいですが、私は "元の"機能に触れることができません。私は "オリジナル"の振る舞いを "継承"するために別のコードを追加することしかできません。ありがとう – Mauro

+2

@マウロなぜ元の機能に触れることができないのですか? – meagar

+0

コアなので触れません – Mauro

2

.trigger()を使用すると、clickイベントをディスパッチして#originalに割り当て、ハンドラをハンドラclickイベントに割り当てて呼び出すことができます。

function on_click_behaviour() { 
 
    console.log("clicked") 
 
} 
 

 
// can not touch this code 
 
$("#original").click(function() { 
 
    on_click_behaviour(); 
 
}); 
 

 
$("#other").click(function() { 
 
    $("#original").trigger("click"); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="original">close window</div> 
 

 
<div id="other">close same window</div>

あなたが代わり$._data()を使用して#original"DOM要素にアタッチイベントハンドラを取得することができ、その後、#other#originalに割り当てられたハンドラをアタッチ。

function on_click_behaviour() { 
 
    console.log("clicked") 
 
} 
 

 
// can not touch this code 
 
$("#original").click(function() { 
 
    on_click_behaviour(); 
 
}); 
 

 
var originalHandler = $._data($("#original")[0]).events.click[0].handler; 
 

 
$("#other").on("click", originalHandler);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="original">close window</div> 
 

 
<div id="other">close same window</div>

+0

機能が「クリック」のイベントであることを知らないとどうなりますか?私はちょうどすべての付属機能を継承することができますか? – Mauro

+2

@Mauro _ "接続されたすべての関数を継承することはできますか?" '$ ._ data($("#original ")[0])を反復することができます。events'オブジェクト[clickイベントで要素を検索する](http://stackoverflow.com/questions/24744967/find-elements-with-click -event /) – guest271314

関連する問題