divをネストしている状況があります。親div(onclick()イベントがあります)と、動的に入力されているいくつかのdivがあります。'バブリング'により、onclick()イベントがDOMを介して伝播し、すべての親でonclick()イベントがトリガーされることを理解できます。私が行ったすべての調査では、これを防止しようとしている多くの人々が示されていますが、私はそれを機能させることができません。onclick()を機能させる唯一の方法は、divの端の近く、おそらく子divが存在しない場所をクリックすることであり、親を直接クリックしています。
以下に該当するコードを含めました。ページにはこれらのいわゆる「ウィジェット」が9つ存在する可能性がありますが、最初の「ウィジェット」を参照する以外のすべてのコードを削除しました。
更新:JavaScript関数からすべてを引き出して、HTMLコードに直接入れようとすると、期待どおりに機能します。ただし、これを行うと、必要な機能が削除されるため、この回避策を回避するようにします。
以下に新しいフィドルがあります。これは、イベントが期待どおりにJS関数を呼び出していない場合でも、基本的に私が何をしようとしているのかを示しています。
更新#2:コードに表示されている応答を模倣するフィドル(以下の#5)を作成しました。フィドルを使用している場合、divの中央をクリックしてもアラートが表示されないことに気付くでしょうが、divの外側の境界の近くをクリックすると、最終的に応答が返されます。
問題が解決しました:
以下のRacheetの回答によると、この問題は解決されています。参照用に完全に機能するコードを使用して最終的なフィドルを作成しました:http: //jsfiddle.net/v3MGX/8/
JAVASCRIPT:
function initializeWidgets(){
var widget1 = "Professional";
widget1 =
"<div class='outer'><div class='middle'>
<div class='inner'><h1>" + widget1 + "</h1></div></div></div>";
document.getElementById("widget1").innerHTML = widget1;
}
function hoverWidgets(widgetID){
var w = new Array();
w[0] = "Work Experience, Educational History, and Resume Download";
w[widgetID-1] = "<div class='outer'><div class='middle'>
<div class='inner'><h2>" + w[widgetID-1] + "</h2></div></div></div>";
document.getElementById("widget"+widgetID).innerHTML = w[widgetID-1];
}
該当するHTML:
<div class="widget" id="widget1" onclick="alert(1);" onmouseover="hoverWidgets('1')"
onmouseout="initializeWidgets()"></div>
現在のフィドル:http : //jsfiddle.net/v3MGX/5/
最終フィドル:http : //jsfiddle.net/v3MGX/8/