0

チェックボックス、選択、テキストフィールドなど、さまざまな要素を持つ検索フォームがあります。各変更には、一種のカウンターとして結果の数を取得する ajax 呼び出しが伴います。カウンタが値 0 を返す原因となった前の要素だけをリセットしたいと思います。

変数の各変更を追跡することを考えていました。カウンターが 0 に評価されるたびに、変更の原因となった要素をリセットします。ただし、これにより、多くのコードと飛び回るさまざまな要素をすべて異なる方法で処理する必要が生じるのではないかと心配しています。

誰もが考えることができる問題に対するよりエレガントな解決策はありますか? 助けていただければ幸いです。

4

3 に答える 3

1

あなたの質問にコメントすることはできませんが、正しいことを理解していれば、大きなフォームがあり、要素を変更するたびにajax呼び出しがトリガーされ、結果セットが返されます。

この結果セットのサイズがゼロの場合は、フォームを以前の値にリセットする必要があります。

つまり、最後に変更された値だけを追跡してリセットする必要があるということです。

この場合、onchangeイベント コールバックはthisvalue を使用して現在のフォーム要素の値と ID を取得する必要があります。次に、結果セットが戻ってきたときに、行がない場合は、格納された値をその要素に戻します。

それ以外の場合、フォームがグローバルに管理されている場合は、常に.clone()呼び出しで.remove()保存し.insert()、結果セットが空の場合はクローンを元に戻すことができます。

PS:私はこのソリューションが本当にエレガントではないことを知っています:)

于 2012-09-04T14:56:04.597 に答える
0

フォームへの各変更を記録することで問題を解決しました

$("#form_id").on("change", function(event) {
  //Event bubbling
  type = $(event.target).get(0).type;
  selector = $(event.target);
}

次に、ストラテジーデザインパターン(Javascriptストラテジーデザインパターン)を使用して、可能な各フィールドタイプを適宜リセットします。テキストフィールドの例、

var Fields = {
  "text": {
    resetAction: function(fieldSelector) {
      fieldSelector.val('');
    }
  }
};

//To call the reset action for the type of field,
Fields[type].resetAction(selector);

非表示のフィールドの変更もバブルさせるには、変更イベントをトリガーする必要がありました。

于 2012-09-06T15:12:39.680 に答える
0

AJAX モジュールは、このイベントを発生させるデータ (PHP 関数: JSON_encode) を含む JSON でエンコードされた文字列を返す可能性があり、それ以降、誤った値を循環してリセットし、詳細情報を表示することができます。つまり、「あなたの電子メールは無効のようです」。

PHP: JSON_encode を参照 JavaScript: getElementsByTagName('input') (または textarea または select) を参照 注: 選択項目の場合、「値」よりも属性「selectedIndex」を変更したい場合があります。

于 2012-09-04T14:36:00.087 に答える