0

以下を使用して、フォームから JavaScript 関数を呼び出す HTML コードがあります。

<form name="f" id="f" ...>
  <input name="myField" onchange="doFunct(f.myField.value,f.yourField);" />
  <input name="yourfield" onchange="doFunct(f.yourField.value,f.anotherField);" />
...

JavaScript コードでは:

function doFunct(field,dest){
    // do something with field
    dest.value = field;
    // see if the dest has a change field
    if (dest.onchange !== null) {
        //we have an onchange function, so let's do it!
        dest.onchange();
    }
}

これは、Safari、Opera、および Chrome で正常に機能します。FireFox では次のエラーで失敗します。

エラー: dest.onchange は関数ではありません

FireFox で JavaScript から "dest.onchange()" を実行する方法について何か提案はありますか?

入力フォームのフィールドに変更をカスケードするには、この機能が必要です。

4

2 に答える 2

0

イベントを実行するには、「on」プレフィックスを追加せずに、実行するだけです。dest.change();

于 2010-08-28T09:12:58.537 に答える
0

私の O'Reilly JavaScript Pocket Reference には、さらに調査したところ、次のような段落があることがわかりました。

null(および未定義)

JavaScript キーワードnullは、「値なし」を示す特別な値です。変数に が含まれnullている場合、どのタイプの有効な値も含まれていないことがわかります。JavaScript には、もう 1 つの特別な値があります。未定義の値です。これは、宣言されていない、または初期化されていない変数を使用した場合、または存在しないオブジェクト プロパティを使用した場合に返される値です。 この値の JavaScript キーワードはありません。

alert(dest.onchange) でいくつかテストした後、Firefox がすべての呼び出しについて不平を言っているのではなく、エラー ( undefined ) の呼び出しについてのみ不平dest.onchange()言っていることがわかりました。どうやら (Grrrr!) Firefox はメモを取得できませんでした: [この値の JavaScript キーワードはありません。]

テスト用にコードを変更するとdest.onchange !== undefined、Firefox は問題なく動作しますが、Safari、Opera、および Chrome はテストで失敗します。以下のようにコードを変更すると、4 つのブラウザーすべてで動作します。

if ( (dest.onchange !== null)                // test for safari, chrome, opera
     && (dest.onchange !== undefined) ) {    // test for firefox
    //we have an onchange function, so let's do it!
    dest.onchange();
}

そして、なぜ Firefox がうまく動作しないのかを理解するために 8 時間も費やさなければなりませんでした。

于 2010-08-28T12:22:15.853 に答える