2009-08-27 13 views
0

私のコードでは、フォームのjavascript関数onsubmitと呼ばれ、formname.fieldname.valueを使用してフィールドに検証を行う関数内で、うまく動作しますが突然表示されますエラー "formnameが定義されていません"。事前にjavascriptフォームの検証が突然動作しなくなる

おかげ

+0

"突然"ええ?あなたが助けてくれるいくつかのコードを投稿する必要があります - javascript、フォームコードなど – Steven

+0

問題があるコードを投稿すると、より適切な(より正確で正確な)アドバイスが得られます。さもなければ、我々は推測を与えることができます。 – Sean

答えて

1

いくつかの可能な理由:

  • は、あなたは、name属性がno形式
  • の名前を変更し
  • そのページに同じ名前の別のオブジェクトを追加しましたフォームタグの長さが長い場合
1

コードを投稿すると、しかし、とにかく何が起こっているのか分かっていると思う。 onsubmit関数の中には、正しい変数スコープはありません。私は通常これを回避するために、<form>への参照を関数に渡します。これは本当に簡単です。

<form onsubmit="return doValidation(this);"> 

、その後、あなたのjavascript:

function doValidation(form) { 

    form.fieldOne.value = ... // etc 

}; 

絶対に

<form name="myForm"> 


function doValidation() { 
    var form = document.myForm; 
    form.fieldOne.value = ... // etc 
} 
0

それを参照するようになり、他の方法で「formname.fieldname.valueは、」持つべきではないんIEのハックですどこでも働いた。それを使用しないでください。フォームはグローバル変数(ウィンドウメン​​バー)として登録されるはずではありません。また、互換性の問題もあり、状況によってはスクリプトが「停止」する可能性があります。

は考える:

<form name="foo" method="get" action="/"> ... 
<input name="bar" type="text" value="" /> 

古い学校のDOMレベル0 HTMLの方法で入力にアクセスするための正しい方法は次のとおりです。

document.forms.foo.elements.bar 

これは、Netscapeの2先史時代に戻ってブラウザ間で動作していますグローバル 'ウィンドウ'(名前があなたが誤って選択する可能性のあるメンバーが増えているオブジェクト)の代わりに、 'document.forms'配列を使用することで、名前衝突を引き起こす可能性は非常に低くなります。

は、しかし、これらの日、それはおそらく、IDを使用するのが最も簡単で、DOMレベル1コアのgetElementByIdを方法:

<form method="get" action="/"> ... 
<input name="bar" type="text" value="" id="field-bar" /> 

document.getElementById('field-bar') 

単純であり、ウィンドウ、文書またはフォームオブジェクトのメンバーとは衝突を持っていません。

関連する問題