3

Gmailと同様の機能を追加する必要があります。この機能では、アイテムのリストのチェックボックスが結果の複数のページにわたって記憶され、離れて結果に戻ったときに記憶されます。私が理解しようとしているのは、これを行うための最良の方法です。私はPHPとおそらくjQueryを使用しています。

私の最初の考えは、セッション内の配列にIDを格納するサーバーへのAJAXコールバックをトリガーする各チェックボックスにonClickを追加することです。アイテムのリストがロードされるたびに、システムは行がチェックされているかどうかを確認し、必要に応じてチェックボックスをオンにします。信頼性を確保するため、サーバーへのリクエストが完了できないかどうか(接続の問題、サーバーエラーなど)を確認した後、チェックボックスをオフにし、リクエストは可能な限り迅速に行われます。

これは、いくつかの項目を除いて、すべて良いように聞こえます。

  • すべてチェックしてください:どうなりますか?30(デフォルトのページアイテム)のリクエストをサーバーに送信しますか?または、すべてのonClickを削除し、チェックボックスをオンにして、すべてのIDを使用してサーバーにリクエストを送信してから、onClickを再度追加しますか?または...?すべてのチェックを外すと同様の問題が発生します。
  • 速度:何百人ものユーザーが常にチェックとチェックを外していると、問題が発生し始める可能性があります
  • ブラウザの速度:ページの読み込み後にonClick with JSを追加するのが最善だと思います。これは、1ページに500以上のアイテムがある場合、1〜2秒かかると思います。すべてをチェックすると、より大きな問題になります。

これまで、ユーザーがページを離れたときにそれを検出する信頼できる方法を見つけていませんでした。信頼できる方法があれば、これがオプションであることがわかり、各ページのアンロードで記録するだけです。

他の解決策やより良い方法はありますか?

編集:Eran Galperinが述べたように、check allメソッドは、各チェックボックスをチェックしてから、すべての行でajax呼び出しを行うだけで済みます。onClickを削除する必要はありません。

また、Event Delegationメソッドは良い考えのように見えます—物事をはるかに簡単にするでしょう。

4

1 に答える 1

3
  1. チェックボックスのチェックされたステータスをプログラムで変更した場合、onclickイベントはトリガーされません。ユーザーがすべてチェック/チェック解除リンクをクリックすると、個々のチェックボックスに付けたクリックイベントを気にせずに、別のAJAXリクエストを送信できます。
  2. これは、クリックごとのリクエストを使用する場合のトレードオフです。または、フォーム全体を保存する[保存]ボタンを使用します。
  3. イベント委任を使用する-すべてのチェックボックスを保持するコンテナ全体に1つのonclickイベントをアタッチし、イベントのターゲットをチェックして、チェックボックスがクリックされたかどうかを確認します。また、個人的には、同じページに500の異なるオプションを表示することは避けたいと思います。非常に多くのオプションがどうしても必要な場合は、それらをいくつかのゾーン/ページに分割します。

ページを離れるユーザーの場合、onbeforeonloadイベントを使用できますが、ブラウザーがクラッシュしたり、正常に終了しなかったりした場合は、キャッチされません。ユーザーの変更をキャプチャできることがどれほど重要かによって、これを使用します。

于 2008-12-13T21:37:19.650 に答える