JavaScriptフォームの順序付けの方法の詳細
3587 ワード
本論文では、javascriptでフォームの順序付けを行う方法を紹介します.実例を通じて理解を深めます.必要な友達が参考にしてください.
JavaScriptでは、フォームフィールドのtype属性を利用して、nameとvalue属性とともにフォームのシーケンスを実現することができます.
まず、フォーム提出中に、ブラウザがどのようにサーバにデータを送信しているかを確認します.フォームフィールドの名前と値をURL符号化し、和記号(&)で分割します.無効なフォームフィールドを送信しません.チェックボックスとラジオボタンのみを送信します.typeは「reet」と「button」のボタンを送信しません.選択ボックスの各選択値の項目を個別に選択します.提出ボタンをクリックしてフォームを提出する場合も、提出ボタンを送信します.送信ボタンは送信されません.typeが「イメージ」の「input」の要素も含まれます.選択された「オプトモーション」要素のvalue特性の値です.要素にvalue特性がない場合は、「option」要素のテキスト値です.フォームの順序付け中には、一般的にボタンフィールドは含まれません.結果文字列は他の方法で提出される可能性が高いからです.その他上記の規則は全部従うべきです.
フォームの順序付けを実行するコード:
面というserialize()関数は、最初にpartsという配列を定義し、作成する文字列の各部分を保存します.
その後、フォームフィールドをforループで繰り返し、field変数に保存します.フィールドの参照を取得した後、switch文を使ってtype属性を検出します.プログレッシブプロセスで最も厄介なのは、「select」要素であり、単一のボックスでもあり得るし、複数のボックスでもあり得る.値は選択中の項目があり、複数のボックスはゼロまたは複数の選択中の項目があり得る.ここのコードはこの2つの選択枠に適用され、オプションボックスの数はブラウザで制御されます.選択中の項目が見つかったら、どのような値を使うかを確認する必要があります.value特性が存在しない場合、またはその特性が存在しますが、値が空の文字列である場合は、オプションのテキストを使用して置換します.この特性をチェックするためには、DOM対応のブラウザではhasAttribute()方法が必要であり、IEでは特性のspecified属性が必要である.
フォームに「fieldset」要素が含まれている場合、要素セットに表示されますが、type属性はありません.したがって、type属性が定義されていない場合は、それを序列化する必要はありません.同様に、各種ボタンおよびファイル入力フィールドについても同様である.単一選択ボタンとチェックボックスに対して、そのcheced属性がfalseに設定されているかどうかを確認します.そうであれば、switch文を終了します.checked属性がtureであれば、default文を実行し続け、現在のフィールドの名前と値をエンコードし、parts配列に追加します.関数の最後のステップは、join()を使って文字列全体を書式設定します.つまり、和記号で各フォームフィールドを分割します.
最後に、serialize()関数は、クエリー文字列の形式で、順序付け後の文字列を出力します.
JavaScriptでは、フォームフィールドのtype属性を利用して、nameとvalue属性とともにフォームのシーケンスを実現することができます.
まず、フォーム提出中に、ブラウザがどのようにサーバにデータを送信しているかを確認します.フォームフィールドの名前と値をURL符号化し、和記号(&)で分割します.無効なフォームフィールドを送信しません.チェックボックスとラジオボタンのみを送信します.typeは「reet」と「button」のボタンを送信しません.選択ボックスの各選択値の項目を個別に選択します.提出ボタンをクリックしてフォームを提出する場合も、提出ボタンを送信します.送信ボタンは送信されません.typeが「イメージ」の「input」の要素も含まれます.選択された「オプトモーション」要素のvalue特性の値です.要素にvalue特性がない場合は、「option」要素のテキスト値です.フォームの順序付け中には、一般的にボタンフィールドは含まれません.結果文字列は他の方法で提出される可能性が高いからです.その他上記の規則は全部従うべきです.
フォームの順序付けを実行するコード:
function serialize(form) {
var parts = [],
field = null,
i,
len,
j,
optLen,
option,
optValue;
for (i = 0, len = form.elements.length; i < len; i++) {
field = form.elements[i];
switch (field.type) {
case "select-one":
case "select-multiple":
if (field.name.length) {
for (j = 0, optLen = field.options.length; j < optLen; j++) {
option = field.options[j];
if (option.selected) {
optValue = "";
if (option.hasAttribute) {
optValue = (option.hasAttribute("value") ? option.value : option.text);
} else {
optValue = (option.attributes["value"].specified ? option.value : option.text);
}
parts.push(encodeURIComponent(field.name) + "=" + encodeURIComponent(optValue));
}
}
}
break;
case undefined:
//
case "file":
//
case "submit":
//
case "reset":
//
case "button":
//
break;
case "radio":
//
case "checkbox":
//
if (!field.checked) {
break;
}
/* */
default:
//
if (field.name.length) {
parts.push(encodeURIComponent(field.name) + "=" + encodeURIComponent(field.value));
}
}
}
return parts.join("&");
}
var btn = document.getElementById("serialize-btn");
EventUtil.addHandler(btn, "click", function (event) {
var form = document.forms[0];
alert(serialize(form));
});
面というserialize()関数は、最初にpartsという配列を定義し、作成する文字列の各部分を保存します.
その後、フォームフィールドをforループで繰り返し、field変数に保存します.フィールドの参照を取得した後、switch文を使ってtype属性を検出します.プログレッシブプロセスで最も厄介なのは、「select」要素であり、単一のボックスでもあり得るし、複数のボックスでもあり得る.値は選択中の項目があり、複数のボックスはゼロまたは複数の選択中の項目があり得る.ここのコードはこの2つの選択枠に適用され、オプションボックスの数はブラウザで制御されます.選択中の項目が見つかったら、どのような値を使うかを確認する必要があります.value特性が存在しない場合、またはその特性が存在しますが、値が空の文字列である場合は、オプションのテキストを使用して置換します.この特性をチェックするためには、DOM対応のブラウザではhasAttribute()方法が必要であり、IEでは特性のspecified属性が必要である.
フォームに「fieldset」要素が含まれている場合、要素セットに表示されますが、type属性はありません.したがって、type属性が定義されていない場合は、それを序列化する必要はありません.同様に、各種ボタンおよびファイル入力フィールドについても同様である.単一選択ボタンとチェックボックスに対して、そのcheced属性がfalseに設定されているかどうかを確認します.そうであれば、switch文を終了します.checked属性がtureであれば、default文を実行し続け、現在のフィールドの名前と値をエンコードし、parts配列に追加します.関数の最後のステップは、join()を使って文字列全体を書式設定します.つまり、和記号で各フォームフィールドを分割します.
最後に、serialize()関数は、クエリー文字列の形式で、順序付け後の文字列を出力します.