OK、ここで Firefox が window.event に応答しないという質問がよく寄せられます。代わりに、関数に追加のパラメーターを追加する必要があります。私はそれで問題ありません。私の問題は、別のJavascript関数内からイベントリスナーを割り当てたい場合、どうすればいいですか?
基本的に、私がやろうとしているのは、たとえば「あなたの名前...」などの灰色のテキストを持つフォームボックスを作成し、ボックスをクリックするとテキストが消えて、色が黒に変わります。ボックスがまだ空の状態でフォーカスを外すと、プロンプト テキストが返されます。
今、これを使用したいすべてのページに直接コーディングする代わりに、フォームの ID で呼び出すことができる関数を作成しようとしています。これはすべての入力要素に自動的に適用されます。コードは次のとおりです。
function fadingForm(formElementID, endColor)
{
var form = document.getElementById(formElementID);
for(var i = 0; i < form.elements.length; i++)
{
form.elements[i].originalValue = form.elements[i].value;
form.elements[i].originalColor = form.elements[i].style.color;
form.elements[i].changedColor = endColor;
// Somehow I need to get that event parameter in here I guess?
// I tried just putting the variable event in as a parameter,
// but as you'd expect, that doesn't work.
form.elements[i].onfocus = function() { focused(); };
form.elements[i].onblur = function() { blurred(); };
}
}
function focused(e)
{
evt = e || window.event;
element = evt.target;
if(element.value == "" || element.value == element.originalValue)
{
element.value = "";
element.style.color = element.changedColor;
}
}
function blurred(e)
{
evt = e || window.event;
element = evt.target;
if(element.value == "" || element.value == element.originalValue)
{
element.value = element.originalValue;
element.style.color = element.originalColor;
}
}
もちろん、これは Chrome や Safari などで完全に機能しますが、Firefox では機能しません。