2

アプリケーションにグローバルモーダル「読み込み中、お待ちください」を入れました<div><a>または<input type="button">をクリックするたびに表示されます。<body>これは、 でonclickイベント ハンドラを割り当てることによって実現されます。これによりonload、イベントが発生したときに実行されます。

<body onload="setup()">
    <!-- No control over what will be here -->
</body>

<script>
function setup() {
    document.getElementsByTagName('body')[0].onclick = clickFunc;
}
function clickFunc(eventData) {
    var clickedElement = (window.event) ? event.srcElement : eventData.target;
    if (someConditions) { 
        document.getElementById('modal').style.display = "block";
    }
}
</script>

return falseこれで、マークアップにいくつかのコンポーネントが含まれています (これについては制御できません) onclickconfirm()これにより、モーダルポップアップが表示され、ユーザーが拒否したときにそこにとどまります。event.preventDefault() vs. return falseで説明されているように、おそらくこれを処理する適切な方法はpreventDefault()、イベントがバブルアップしないようにすることでした。

しかし、私はその部分を制御できないので、イベントハンドラーの以前の実行結果を(下位レベルで)知る方法(できれば非jquery +クロスブラウザー)はありますか?

<div>そうでない場合は、コンポーネントonclickに含まれている場合は常にモーダルを表示することを控える必要があると思いますreturn false

テスト用のJSFiddleを次に示します。

アップデート

以下のベルギの答えは、私が探していたものです。ただし、defaultPreventedIE < 9 ではサポートされていないようです。IE < 9 でそれを達成するための同等/回避策はありますか?

4

1 に答える 1

1

をチェックして、返されなかっ(window.event ? event.defaultPrevented : eventData.isDefaultPrevented()) == falseた伝播イベントをキャッチできます。false

于 2012-09-28T13:54:28.743 に答える