2012-03-14 17 views
0

Validation Plugin(See this Fiddle)のAjax errorPlacementに問題があります。 ErrorPlacementの位置:絶対的なは、間違った場所にポップアップするように強制しています。Jquery ErrorPlacementとPosition:Absolute

ユーザーがまだ情報を入力していない場合は、エラーメッセージが正しい位置にポップアップ表示されます(入力フィールドの右側に赤いテキストで表示されます)。ただし、ユーザーが情報を入力してから削除すると、ajaxアラート(「このフィールドは必須です」)が想定される場所の下のフィールドに間違った場所にポップアップします。問題を表示するには、すべてのフィールドを正しく入力してから、名前を削除します。メールフィールドに「このフィールドは必須です」というメッセージが表示されますが、名前フィールドにはこのフィールドが含まれています。

検証を制御JSがある:

$(document).ready(function() { 
     errorPlacement: function(error, element) { 
       error.insertAfter(element).position({ 
        my:'right top', 
        at:'right top', 
        of:element   
       }); 
        error.fadeOut(3000); 
     } 
    }); 
}); 

それが問題を引き起こしているCSSは次のとおりです。

label.error { position:absolute;} 

私はエラーをオーバー浮くことができるように、このCSSを含める必要が入力フィールド。問題を確認するにはFiddleを参照してください。ありがとうございました!次のように

+0

「my、at、of'」は何ですか?私は 'position()'でこれを見たことがない... – elclanrs

答えて

1

はちょうどあなたのCSSを修正:

でも念のためにIEでテスト
form p { 
    position: relative; /* This ensures error label is positioned within the p tag */ 
} 
label.error { 
    top: 0; /* This ensures that it lines up with the top of the input */ 
    right:90px; 
    color: red; 
    position:absolute; 
} 

...

+0

すごく助けてくれてありがとう。 –

1

ニックは、あなたがポイントを逃してきた(私はこれについてあなたのprevious questionに答え)。 jQuery UIにはPositionユーティリティがあります。それは私があなたがそれらをしたい場所にラベルを配置するために使用していたものです。したがって、jsFiddleの唯一の「エラー」は、リソースの下にある「jQuery UI」ボックスをチェックしなかったことです。 jsfiddleのバージョンを作成しました:90pxのものを削除し、jQueryのUIボックスをチェックしました。それでおしまい。

エラーのある要素に対してラベルの配置を変更する場合は、上記のリンク先の位置ユーティリティでoffsetオプションを確認してください。

+0

ありがとう@Ryley。あなたが正しい。私はjquery UIの包含を理解しませんでした。 –

+0

もう1つのことだけが不明です。なぜ私がerror.fadeOut()をインクルードしても、それはfadeOut初めてですか?私は何を意味するかを示すためにフィドルを更新しました...どんなアイデアも本当に感謝しています。ありがとう –

+1

errorPlacementは実際にはエラーメッセージの「どこで」のみ処理しますが、他のロジックはありません。 'showErrors'の仕組みをオーバーライドする必要があるかもしれません、詳細はこのSOの質問をチェックしてください(そこからリンクされているjsfiddleはあなたに関連しています):http://stackoverflow.com/a/8842099/312208 – Ryley

関連する問題