2017-11-06 6 views
1

I持つ親ボタンに追加ボタン:ネストされたボタン:独立した機能を達成するためにどのように

var parent_button = document.createElement("button"); 
var child_button = document.createElement("button"); 
parent_button.appendChild(child_button); 
私はparent_buttonのものから独立したのですchild_buttonのための機能を作成したい

parent_button.onclick = function() { 
    //do stuff 
}; 

child_button.onclick = function() { 
    //do some other stuff 
}; 

しかしこのコードでは、child_buttonをクリックするたびに必ずparent_button.onclick()を起動しています。どのように2つを分けるのですか?

重複のボタンは、次のようになります。子ボタンのイベントオブジェクトの

enter image description here

+0

@PHPglue、これを感謝します。ちょうど明確にする:ボタンが子供を持つことができないと言うとき、これはちょうど悪いコーディングの練習である、またはjavascript/hmtlで達成することは不可能だと言っていますか?後者の場合、なぜ私のchild_buttonがparent_button内に正常に表示されますか? – shopofolive

+0

ネストされたボタンが動作するはずですが、とにかくそれを行うべきではないことはわかりません。 [this](https://stackoverflow.com/questions/39386497/can-i-nest-button-inside-another-button)を参照してください。 – user7387340

+0

@Phpglueはあなたの問題を解決する方法について適切な道を歩んでいます。コーディングが悪いので、コンテナの内側に2つのボタンを配置し、それぞれのパースペクティブボタンにイベントを添付するのは簡単です。結局のところ、彼らは2つの別々の行動をしている。あなたはコードをもっとメンテナンスできるでしょう。別の要素のボタンを簡単に交換することができます。これは、与えられた例で親ボタンにあまり密接に結合されないため、コードを壊さないでしょう。 –

答えて

1

使用stopPropagation()。イベントが子から親に伝播するのを防ぎます。

あなたがここでの例を見ることができます:

var pb = document.getElementById("pb"); 
 
var cb = document.getElementById("cb"); 
 
pb.addEventListener("click", function(e) { 
 
    console.log("Parent"); 
 
}); 
 
cb.addEventListener("click", function(e) { 
 
    console.log("Child"); 
 
    e.stopPropagation(); 
 
})
<button id="pb">Parent Button <button id="cb">Child Button</button></button>

注:私は、デフォルトの動作では、あなたが子要素をクリックすると、その子との両方のイベントであることを考えます親がトリガーするはずですが、この例ではこれは起こりません。おそらく、ボタンが親であることに特有のものかもしれません。

+1

ありがとうございます!これはうまくいった。 – shopofolive

関連する問題