2

私はjqueryとその素晴らしいことを学んでいます! 複雑なことを行うのは非常に簡単ですが、オートコンプリートが失敗した場合に誰かがフォームを送信できないようにする (または警告する) 方法がわかりません。

私のサイトには、データベースの既存のデータでオートコンプリートされるフォームがあり、送信時にそのエントリに関する情報が提供されます。彼らがデータベースにないものを追加すると、私のサーバーはそれらをフォームページに戻してエラーを知らせますが、フォームに記入している間(フォームを送信する前)に警告するために何かしたいと思います。 .

簡単に言えば、フィールドの変更を検出する方法は知っていますが、フィールドがデータベースにない場合、どのように検出 (およびフォームの送信を防止) できますか? 私が考えている 2 つのケースは、stock("ibm') のオートコンプリートがあり、ユーザーが "ib" (完全に完了する前) または "ibmm" (オートコンプリートされた後) のいずれかを入力した場合です。

フィールドがオートコンプリートによって完全に解決されていないかどうかを検出する jquery 風の簡単な方法はありますか?

助言がありますか?

更新: 要求に応じて、ここに私のオートコンプリート コードを示します (基本的には、検索ボックスで値を取得し、「オートコンプリート」という URL に送信するだけです):

<script>
  $(function() {

    var cache = {},
      lastXhr;
    $( "#global-search-field" ).autocomplete({
      minLength: 2,
      source: function( request, response ) {
      $(".message").empty()
        var term = request.term;
        if ( term in cache ) {
          response( cache[ term ] );
          return;
        }

        lastXhr = $.getJSON( "autocomplete", request, function( data, status, xhr ) {
          cache[ term ] = data;
          if ( xhr === lastXhr ) {
            response( data );
            if ( data == 'no results found'){
              //alert(data);
              //$(".message").empty().append("not found!");
            }
          }
        });
      }
    });

  });
  </script>
4

2 に答える 2

2

ボタンを無効にしてフォームをロードします。フォームに入力しているときに、フォームの準備ができたときに通知するフラグ (class=validation) の実行中の集計があり、ボタンを有効にすることができます。

すべての情報の準備ができていない場合に失敗するはずであることが既にわかっている場合、サーバーを呼び出そうとする実行可能なボタンを用意しても意味がありません。

下の例は、3 つのボックスすべてにテキストを入力すると機能します。jquery で appendTo() を使用して、クラスを持つ各テキスト ボックスに赤いフォントで「必須」というテキストを追加することで、コントロールを示すことができます。

html 要素にクラス検証がある限り、それが必要になるため、データを入力すると、これらの検証クラスが削除されます。

<html>
  <head>
 <script src="jquery.js"></script>
 <script type="text/javascript">

    $(document).ready(function(){

        $("input[name^='test']").blur(function(){
             if ($(this).val() != "" && $(this).hasClass("validation")){
                $(this).removeClass("validation");
            }

            var check = $(".validation"); //checks to see if there is any more validation
            if (check.length == 0){
                $("#nowSubmit").prop("disabled", false);
            } else {
                $("#nowSubmit").prop("disabled", true);
            }
        });
    });
  </script>
  </head>
  <body>

<form>
<input id="control1" name="test" type="textbox" class="validation" />
<input id="control2" name="test" type="textbox" class="validation" />
<input id="control3" name="test" type="textbox" class="validation" />

<input id="nowSubmit" type="submit" value="Click Here" disabled="true"/>
</form>
</body>
</html>

ここでの実例: http://jsfiddle.net/hSatZ/

于 2012-07-20T01:55:04.850 に答える
1

特定の値がデータベースにあるかどうかをチェックし、必要に応じてフォームを送信せずにエラーについてユーザーに通知するオートコンプリート フィールドの「onchange」イベントに置かれた ajax リクエストを使用できます。

于 2012-07-20T00:33:03.070 に答える