すべてのページの上部に重要なメッセージが表示されています。ページが読み込まれると、メッセージは明るい灰色の背景(ページの残りの部分と同じ)に対して真っ赤なテキストのように見えます。ユーザーが更新したい場合は、それをクリックしてeditMsg関数を呼び出すことができます。これにより、通常のテキスト入力のように見え、右側に[保存]ボタンが表示されます。
ユーザーがすべてを元の外観に戻すことにより、マウスを囲んでいるdivの外に移動した場合、更新をキャンセルする必要があります。onBlurを試しましたが、何もできないようです。
簡単そうに見えますが、マウスをテキスト入力の外に移動してもdiv内に移動すると、cancelMsgChg関数が呼び出されます。運が悪かったので、cancelBubble(IE)とstopPropagation(FF)のいくつかのバリエーションを試しました。実際、それらが異なる要素にある場合、なぜこれらが必要になるのかわかりません。
私は朝中ずっとこれに尻尾を追いかけ、ここでいくつかの投稿を読んでいましたが、時間ごとにもっと迷子になりました!
HTMLは次のとおりです。
<div id="update_message" onMouseOut="cancelMsgChg('onMouseOut');" >
<br />
<input id="message" onclick="editMsg();"
type="text" value="My message"
style="background:#DDDDDD; color:#DD0000; font-weight:bold; border:0;" />
<button id="save_message" style="display:none;"
class="btn" onclick="return saveHeaderMsg('Save Header Message',
document.getElementById('message').value);">Save Message</button>
<br /><br />
</div>
アップデート:
divタグからonMouseOutイベントを削除し、マウスがdivの外側でクリックされたときのイベントリスナーを追加しました。
if (document.addEventListener) {
document.addEventListener("click", cancelMsgChg('click'), false);
} else if (document.attachEvent) {
// IE
document.attachEvent("onclick", cancelMsgChg('onclick'), false);
}
function cancelMsgChg(e) {
console.log ("in cancelMsgChg");
// In Internet Explorer you should use the global variable `event`
e = e || event;
// In Internet Explorer you need `srcElement`
var target = e.target || e.srcElement;
var id = target.id;
console.log ("id = " + id);
if ( id != "update_message" ) {
//reset everything
}
}
しかし、「ターゲットは未定義です」というエラーが発生します。だから...「e」はまったく定義されていませんか?