1

JavaScript 付き >

var customer=document.getElementById('custList').value;

そしてそれはうまくいきます...

なぜそれが機能するのですか...

var customer=(form1.custList.value);

form1定義されていないエラーが発生します。

特に、これが IE と Chrome では機能するのに Firefox では機能しないのはなぜでしょうか。私には明確に述べられているように思えますが、私はスクリプト エンジンではありません。

理解しようとしているだけ

4

5 に答える 5

1

IE/Chrome/Opera は id="form1" を name="form1" (またはその逆?) として誤って解釈し、従来のマークアップを説明していると思います。

dom 0 レベルのプロパティ アクセスなどに依存せform1.custList、代わりに を使用しますdocument.getElementById。入力するには長すぎる場合は、それを行うメソッドを定義します..例

function getId( id ) { return document.getElementById(id) }
于 2009-10-18T06:53:29.327 に答える
1

2 番目のイディオムは標準的ではないため、whilegetElementByIdはすべてのブラウザーでサポートされていなければ、JavaScript と互換性がありません。

また、2 つ目は、私が間違っていなければ、document.form1.custList.value.

于 2009-10-18T06:54:20.617 に答える
1

ページ内のフォーム オブジェクトを参照する場合は、ドキュメント内のフォーム オブジェクトの配列である「document.forms」オブジェクトを使用できます。次のようなフォームがあるとします。

<form method="post" action="somthing.php" name="myContactForm" id="contact_form">
   <input type="text" name="custList" id="custListId" />
</form>

正しい方法で値にアクセスするには、次のいずれかの方法を使用できます。最初にフォームにアクセスし、次に要素にアクセスします。

var form = document.forms['myContactForm']; // use the 'name' attribute as the array key

 // or if this is the first form appeared in the page. otherwise increase the index number to match the position of your target form.
 var form = document.forms[0];

// or access the form directly
 var form = document.getElementById('contact_form');

 // now get the element, from the form. you can access form elements, by using their name attribute as the key in the elemetns array property of the form object.
 var cust = form.elements['custList'].value();

または、フォームなしでフォーム要素に直接アクセスできます。ドキュメント内の任意の要素をその ID で直接参照できます。ここではフォームは必要ありません。

 var cust = document.getElementById('custListId');

これらのステートメントはすべて、IE、firefox、opera、chrome などで実行される有効な JavaScript です。ただし、'name' 属性を呼び出すだけで、IE のフォーム オブジェクトを参照できます。したがって、この行はIEで機能します(そして、あなたが言っているように、クロム。クロムがそれを処理することを知りませんでした):

var cust = myContactForm.custList.value(); 

IE は、不明なウィンドウ レベルのプロパティ ( myContactForm など) を要素の 'name' 属性に一致させてマップしようとします。

于 2009-10-18T07:08:38.807 に答える
0

Internet Explorer は独自の方法で多くのことを行いました。必ず、最初の方法が正しい方法です ( を使用getElementById)。
下位互換性のために、これらの「バグ」の多くは引き続き機能しますが、使用しないでください。
ブラウザ間の違いはまだあります。JavaScript フレームワーク ( jQueryなど) を使用すると、ここで非常に役立ちます。クロスブラウザーでうまく動作するように記述されています (記録として、コードは$('#custList').val();jQuery を使用します) 。

于 2009-10-18T06:57:04.950 に答える
0

Internet Explorer は、すべてのフォーム要素を名前でwindowオブジェクトにプロパティとして詰め込みます。これは壊れやすく、互換性がなく、巧妙に使用するのが難しく、2 番目の例が機能する理由です。他のブラウザーは、そのインターフェースをまったく実装しないという単純な方法をとっており、適切な DOM 機能を残しています。またはツールキット。jQuery は本当に便利です。;)

于 2009-10-18T07:00:38.280 に答える