私はjQueryの初心者ですが、Perlのデベロッパーであり、regexesをよく知っています。したがって、jQuery Validationプラグインを使用したくありません。jQuery:フォームの検証中に初期css( 'value')を復元する
私は #blah_txtテキストまたはテキストエリアの入力フィールドをそれぞれ有する、以下の3つのWebフォームを、検証し、ボタン#blah_btn提出しようとしている:私は「
をうまく動作するようだ次のjQueryコード、それらを検証し、M:
<script type="text/javascript" src="/jquery-1.4.4.min.js"></script>
<script type="text/javascript">
$(function() {
$('#mks_btn').click(function(e) {
$('#cl_txt').css('border', '2px solid black');
$('#comment_txt').css('border', '2px solid black');
if (! $('#mks_txt').val().match(/^(CL\s*)?[0-9]{6,}$/i)) {
$('#mks_txt').css('border', '2px solid red');
e.preventDefault();
}
});
$('#cl_btn').click(function(e) {
$('#mks_txt').css('border', '2px solid black');
$('#comment_txt').css('border', '2px solid black');
if (! $('#cl_txt').val().match(/^(MKS\s*)?[0-9]{6,}$/i)) {
$('#cl_txt').css('border', '2px solid red');
e.preventDefault();
}
});
$('#comment_btn').click(function(e) {
$('#mks_txt').css('border', '2px solid black');
$('#cl_txt').css('border', '2px solid black');
if ($('#comment_txt').val().length < 2) {
$('#comment_txt').css('border', '2px solid red');
e.preventDefault();
}
});
});
</script>
マイ(化粧品)の問題がある:
ユーザーが最初のテキストフィールド( "MKS")に無効な値を入力して "MKSを追加"ボタンをクリックすると、フォーム送信が妨げられ、テキストフィールドの境界が赤くなります。次にユーザーは気を変えてもう1つのウェブフォームにテキストを入力すると決定し、再び無効なデータを入力します。それから私はすでに2つの赤い枠線を持っていて、それはユーザーを苛立たせるでしょう。
私は上記のように、ボタンクリックで他のテキストフィールドを黒く塗りつぶしてこの問題を回避しようとしています。しかし、ユーザーが何かを入力し始める前に元の境界線が何か他のものになっていたので、これは良く見えません。
私は元そのCSS(「国境」)何とかすべてのテキスト入力フィールドの値を復元することができればだから私は、不思議 - ボタンがぼかしや他のイベントに多分クリック(またはされたときにことを示します、ユーザーは別のウェブフォームに切り替えましたか?)
ありがとうございます!アレックス
UPDATE
私のブラウザは、Firefox 3.6.12/WinXPのですが、私はのための
UPDATE 2
HTMLコード:-)もちろん、すべてのブラウザの仕事をしたいです3つのウェブフォームが下にあり、それ以外のテキストとリンクのみがウェブページにあります。
<form>
<tr valign="top">
<th>MKS</th><td>
<input name="show_id" type="hidden" value="20110111172527685">
<input name="toggle_mks" id="mks_txt" type="text" size="10" maxsize="10">
<input type="submit" id="mks_btn" value="Add MKS" class="toggle">
</td></tr>
</form>
<form>
<tr bgcolor="#EEEEEE" valign="top">
<th>CL</th><td>
<input name="show_id" type="hidden" value="20110111172527685">
<input name="toggle_cl" id="cl_txt" type="text" size="10" maxsize="10">
<input type="submit" id="cl_btn" value="Add CL" class="toggle">
</td></tr>
</form>
<form>
<tr valign="top">
<th>Comments</th><td>
<input name="show_id" type="hidden" value="20110111172527685">
<textarea name="comment" id="comment_txt" rows="4" cols="60" maxsize="320">
</textarea>
<input type="submit" id="comment_btn" value="Add comment" class="toggle">
</td></tr>
</form>
おかげ - これは良い提案である、任意のアイデアは、removeClassを(自動化する方法にしてください)も (ぼかし?)いくつかのイベントに呼び出して:ありますそれでも$( '#mks_txt')を呼び出すことはOKです。removeClass( "className");そのフィールドにそのクラスが追加されていない場合は? –
サンプルを追加しましたが、要素に存在しないクラスを削除することができます.jQueryはこれを受け入れます。 –
すべてのボタンをクリックするとe.preventDefault()が呼び出されますが、それは問題ありません。空の入力フィールドでもmatch()を呼び出すことは大丈夫だと思いますか? jQueryもそれを受け入れるようです –