0

最初に検証を行い、次に ajax を介して送信するフォームがあります。ここでは、データベースに既に存在する可能性のあるユーザー名など、いくつかのフィールドがチェックされます。問題の要素の直後に、これらのエラー状態のいずれかを表示したいと考えています。フォーム要素は次のようになります。

  <span class="inputRow">
    <span class="formLabel">
        <label for="user_name">User Name</label>
    </span>
    <span class="formInput">
        <input id="user_name" name="user_name" class="inputText required" title="User Name" tabindex="3" type="text" value="<?= $user_name ?>" >
        <span class="formError"><span id="user_msg"></span></span>
    </span>
  </span>

次のような典型的な検証/エラー配置コードがあります。

  errorPlacement: function(error, element) 
  {
    if (element.attr("name") == "user_name" )
        error.insertBefore("#user_msg");
    else
        error.insertAfter(element);
  },
});

フォームを送信するために、次のような送信ハンドラーがあります。

submitHandler: function(form) {

  $.ajax({
    type:'POST', 
    url: 'add_user.php', 
    data:$('#reg_form').serialize(), 
    success: function(response) {
      if (response.status == "error") {
        if (!response.hasOwnProperty('user_name'))
          $("#user_msg").text("");
        else if (response.user_name.length > 0)
          $("#user_msg").text(response.user_name);
      }
    }
  });
},

返される応答は JSON 配列であり、エラー メッセージを正常に取得できます。これは、フォームを初めて送信するときにすべてうまく機能します。ユーザー名が重複している場合は正しく表示され、ユーザー名が入力されていない場合も正しく表示されます。問題は、フォームを送信して、ファイルに重複したユーザー名に関する応答を受け取ったときに発生します。次に、user_name フィールドをクリアしてフォームを再度送信しようとすると、ユーザー名が重複しているというメッセージが表示されたままになり、ユーザー名が必要であるというメッセージも表示されます。

私には、errorPlacement 関数が error.insertBefore("#user_msg") を使用するため、これらの表示方法に競合があるように見えますが、ajax 関数からの戻り値は $("#user_msg").text() を使用します。そのため、insertBefore() は以前の text() 値を削除しませんが、errorPlacement からテキストを表示する他の方法は見つかりませんでした。エラー オブジェクトからテキスト値を取得できますか? もしそうなら、どのように?または、これらの両方を同じように機能させるより良い方法はありますか?

4

2 に答える 2

0

あなたの問題が正確にはわかりませんでした。

エラーが発生したときにこのようにエラーが表示され、それを修正してもエラーが残る場合は、エラーの配置を空にしていないことが原因です。エラー配置を空にする新しいリクエストを送信する前に、解決策がここにあります。

別の方法でエラーを表示するために jquery Dialog を使用できます。

于 2013-02-14T03:26:33.820 に答える
0

引用:「エラー オブジェクトからテキスト値を取得できますか? その場合、どのように?」

error次の方法で、オブジェクトからテキストを取得できます。

error.text()

使い方によっては、次のようにフォーマットする必要がある場合があります。

$(error).text()
于 2013-02-14T04:03:56.940 に答える