1

次のようなフォームがあるとします。

Name:<input type="text" name="xxx"  id="name"/>
Type:<select>
          <option>xx</option>
          <option>xx</option>
      </select>
<input type="submit" disabled="disabled" id="sub" />

ここで、ユーザー名が一意であることを確認したいと思います。また、送信ボタンは、名前が一意である場合にのみ有効になります。そこで、jQueryAJAXを使用してデータベースにクエリを実行します。

でも今はいつチェックするのかな?

最初に私はこれを使用します:

$("#name").blur(function () {
    $.get(........);
}

しかし現在、最新のブラウザでは、フォームデータの保存とauto-filled機能が提供されています。したがって、ユーザーが入力をdbclickすると、ブラウザーはユーザーが選択できるデータ(履歴データ)のリストを提供します(下の画像を参照)。

ここに画像の説明を入力してください

ユーザーがそれらの1つを選択すると、blurイベントをトリガーできません。私もこのイベントを使おうとしてchangeいますが、ユーザーがキーボードを使用して入力すると、サーバーへのリクエストが多すぎます。

この問題を解決するにはどうすればよいですか?

更新: 以下の答えはどれも完璧ではありません。そして今、私は自分のページでタイマーを使用して、「名前」が変更されたかどうかを0.5秒に1回チェックします。それは私の要件を満たしているようです。

4

4 に答える 4

1

簡単な解決策:パスワードフィールドのフォーカスでajax呼び出しを起動します。

于 2012-06-15T00:54:57.650 に答える
0

ユーザーがテキストボックスをダブルクリックし、オプションをダウンロードして、コードビハインドの配列に格納するときに行う必要があります。ユーザーがテキストボックスに入力したら、不要なアイテムを削除します。

また、(入力要素にある)blurのようなイベントを発生させたい場合は、ドロップダウンリストにも変更を使用することをお勧めします。

于 2012-06-15T00:54:04.610 に答える
0

私が使用するアプローチは、ユーザー名のコレクションをにロードしon page load、ユーザーが入力したデータをのコレクションと照合することchange eventです。このように、データベースはページの読み込みごとに1つのリクエストのみを処理する必要があり、フロントエンドにはさらに多くの作業がありますが、ユーザーエクスペリエンスに悪影響を与えることはありません。

同時実行の問題が発生する可能性があります。2人の新しいユーザーが同時にページを読み込み、同じユーザー名を選択して送信を試みます。最後に送信したユーザーには、アクティブな送信ボタンがありますが、無効なユーザー名が表示されます。それに対処するためのサーバー側。

于 2012-06-15T01:06:21.447 に答える
0

「可用性の確認」ボタンを追加し、「可用性の確認」ボタンのクリックイベントでユーザー名の一意性チェック機能を起動することもできます。

Name:<input type="text" name="xxx"  id="name"/> <input type="button" name="checkUsername"  id="checkUsername" value="Check availability"/>
Type:<select>
          <option>xx</option>
          <option>xx</option>
      </select>
<input type="submit" disabled="disabled" id="sub" />

$("#checkUsername").click(function (e) {
    $.get(........);
    e.preventDefault();
    return false;
}
于 2012-06-18T03:07:57.793 に答える