3

prototype.js表示されているフォーム フィールドの値のみをシリアル化することは可能ですか。要素が同じ名前を持つフォームがありますが、1 つが表示され、もう 1 つが非表示になっています。を使用してフォームをシリアル化すると$('formid').serialize()、両方のフィールド値が取得され、出力は次のようになります。

user_email=abc@example.com&mymodule_custom_delivery_area=20&mymodule_custom_delivery_area=test

最初の要素はドロップダウンで、2 番目の要素はテキスト ボックスでした。テキストボックスが非表示になり、ドロップダウンが表示されました。どちらも同じ名前です。非表示のテキスト ボックスの値を取得したくありません。これどうやってするの?ありがとう

4

1 に答える 1

3

警告: 解決策が不完全です。より良い解決策の出発点として自由に使用してください。

残念ながら、一般的なケースでこれを行う良い方法は見つかりませんでしたが、入力要素が直接隠されている場合、次の解決策がうまくいきます。ただし、一部の入力が別の要素に含まれており、その要素が非表示になっている場合は機能しません。

とにかく、私の解決策は次のようになります。

function check() {
    var inputs = $("myform").getElements();
    var visibleInputs = inputs.grep({ match: function(elem) { return elem.visible();} });
    var serialized = Form.serializeElements(visibleInputs);
    console.log(serialized); // here do something useful with it instead
}

最初の行では、フォームのすべてのフィールドのリストを収集します。2行目では、そこからすべての可視要素をフィルタリングします(関数grepを含むアイテムが必要なので、マッチャーを渡したと思わせるためのキーをmatch備えた単純な辞書を提供しました)。match最後に、フィルタリングされた要素のみがシリアル化されます。

お願い: これを改善して、含まれる要素の一部が非表示になっているために表示されない入力フィールドを除外することはできますか? match私は、すべての親を上に上げて、それが隠されている場合はそれぞれを個別にチェックする、頭がおかしい複雑な機能しか考えられません。

于 2013-02-16T15:17:50.137 に答える