ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript DOM学習 第7章 フォーム拡張_基礎知識

JavaScript DOM学習 第7章 フォーム拡張_基礎知識

WBOY
WBOYオリジナル
2016-05-16 18:34:20900ブラウズ

アイデア
オンライン CD 評価ツールがあると仮定します。ユーザーがお気に入りの CD をすべて表示できるようにしたいと考えています。しかし、ユーザーが平均して何枚の画像を閲覧するかをどうやって知るのでしょうか?このページにフィールドをいくつ追加する必要がありますか?
これは、W3CDOM が登場する前から確かに問題でした。 CD を 7 枚置いたとします。ただし、ユーザーは 1 枚の CD のみを表示したい場合があり、多すぎるとユーザーが恐怖を感じる可能性があるため、すべての CD を表示したいと考えているため、何度も送信する必要があります。これは本当に迷惑です。
W3C DOM を使用する場合のみ、ユーザーは生成するフィールドの数を決定できます。この効果は以前のものとは大きく異なります。

送信をクリックすると、フォームは取得したすべてのパラメータを配列形式で送信します。これは、実際にサーバーに送信されたかどうかを確認するために使用されます。残念ながらMac版IE、Safariでは送信できません。
IE の問題
Windows の IE には 2 つの重大な問題があります。
最初の問題は、名前が異なっていても、生成されたすべてのラジオ ボタン ボックスが同じ配列に属していることです。このように、ユーザーはすべてのラジオ ボタン ボックスのうち 1 つだけを選択できます。つまり、生成されたフォームではラジオ ボタンを使用できません。
一部の読者は、innerHTML によって生成されたラジオ ボタンには問題がないと言っています。どうしてもラジオ ボタンを使用したい場合は、試してみてください。
2 番目の問題は、生成されたフォームが従来の document.forms からアクセスできないことです。IE はフォームを配列に含めません。これは、ID を設定することで解決できます。

フォームの HTML コードを説明します:

コードをコピーします コードは次のとおりです:

コードをコピー


コードとして以下:

var counter = 0;
function moreFields() {
counter ;
var newFields = document.getElementById('readroot').cloneNode(true); = ''; newFields.style.display = 'block';
var newField = newField.childNodes;
for (var i=0;i theName = newField[i].name
if (theName)
newField[i].name = theName counter;
}
var insertHere = document.getElementById('writeroot'); insertHere.parentNode.insertBefore(newFields,insertHere);
}
window.onload = moreFields;


すべてのフォーム項目には一意の名前が必要であるため、最初にカウンターが必要です。生成された名前の後にカウンター値を追加します。カウンタを初期化します:


コードをコピーします コードは次のとおりです。 var counter = 0; 次に実際の関数です。カウンタに 1 を加えます。


コードをコピー
コードは次のとおりです。 function moreFields () { counter ;

次に、テンプレートをコピーし、ID を削除し、表示をブロックに設定します。 readroot はドキュメント全体の唯一の ID である必要があり、テンプレートをコピーした後にユーザーが確認できるように表示される必要があります。



コードをコピー
コードは次のとおりです。 var newFields = document.getElementById('readroot ').cloneNode(true); newFields.id = '';

このコピーの子要素を繰り返します。



コードをコピーします
コードは次のとおりです。 var newField = newFields.childNodes; >for (var i=0; i
子要素に name 属性がある場合、その一意性を保証するために name 値にカウンター値を追加します。



コードをコピーします


これで、このコピーを挿入する準備ができました。これを writeroot の前に挿入します:



コードをコピー

次に、ユーザーが入力したときにそれを実行します。参照:



コードをコピー

コードをコピー


コードは次のとおりです:
onclick="this.parentNode.parentNode.removeChild(this.parentNode); /> このボタンをクリックすると、親要素 (DIV) から削除されます。生成されたフォーム全体が消え、再び表示されなくなります。 翻訳アドレス: http://www.quirksmode.org/dom/domform.html 転載のために以下の情報を保管してください
著者: Bei Yu (tw: @rehawk)
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。