0

OK、ここで Firefox が wi​​ndow.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 では機能しません。

4

1 に答える 1

1

イベントリスナーはイベントオブジェクトfocusedblurred受け入れますeが、イベントオブジェクトを提供することはありません. focused匿名ラッパー関数に提供されるイベント オブジェクトは、使用されることも/に渡されることもありませんblurred。したがって、eは常に未定義です。

代わりに、リスナーをセットアップするときは、次のようにします。

form.elements[i].onfocus = function(e) { focused(e); };
form.elements[i].onblur  = function(e) { blurred(e); };

あるいは:

form.elements[i].onfocus = focused;
form.elements[i].onblur  = blurred;

イベントオブジェクトがリスナー関数に直接渡されるようにします。

于 2012-12-13T01:19:20.197 に答える