Joren Rapini のブログからこのコードにもう 1 つ機能を追加しようとしています。これは単純なフォーム バリデータです。プロジェクトの性質上、実際の AJAX 送信またはページ機能の更新を行うためのテストにあまりアクセスできません。だから私は検証コードを使用しようとしていますが、さらに、すべての必須フィールドが入力され、送信ボタンがtrueに設定されていることで「アクティブ」になると、a)フォームコンテナのdivとbを非表示にしたい) 以前に非表示にした div を表示します。
だから私たちはこれを持っています:
$(document).ready(function(){
// Place ID's of all required fields here.
required = ["first_name", "last_name", "email", "street_address"];
// If using an ID other than #email or #error then replace it here
email = $("#email");
errornotice = $("#error");
// The text to show up within a field when it is incorrect
emptyerror = "Please fill out this field.";
emailerror = "Please enter a valid e-mail.";
$("#unique-form").submit(function(){
//Validate required fields
for (i=0;i<required.length;i++) {
var input = $('#'+required[i]);
if ((input.val() == "") || (input.val() == emptyerror)) {
input.addClass("needsfilled");
input.val(emptyerror);
errornotice.fadeIn(750);
} else {
input.removeClass("needsfilled");
}
}
// Validate the e-mail.
if (!/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/.test(email.val())) {
email.addClass("needsfilled");
email.val(emailerror);
}
//if any inputs on the page have the class 'needsfilled' the form will not submit
if ($(":input").hasClass("needsfilled")) {
return false;
} else {
errornotice.hide();
return true;
$("#placeHolder #myForm").hide();
$("#placeHolder #stuff").show();
}
});
// Clears any fields in the form when the user clicks on them
$(":input").focus(function(){
if ($(this).hasClass("needsfilled") ) {
$(this).val("");
$(this).removeClass("needsfilled");
}
}); });
そして、私のコードはこのビットです:
$("#placeHolder #myForm").hide();
$("#placeHolder #stuff").show();
これはうまくいきません。#stuff div に感謝メッセージといくつかのソーシャル メディア リンクを非表示にして、基本的にフォームの送信時に感謝ページの AJAX ロードを複製しようとしています。しかし、私はクライアントに制限があります。サーバーで多くのテストを行ったり来たりすることはできません。これに対する非常に単純なフロントエンドソリューションを装備しようとしています。検証部分は必要に応じて機能しているようで、コード内のすべての div id が正しいので、このイベント処理の構造にはまだ理解していない概念があり、締め切りがあることを知っています。近づいているので、誰かアイデアがあれば助けを求めています。
構造または構文に何かが欠けていることはわかっていますが、それが何であるかはわかりません。別の関数を作成して、代わりにそれを呼び出す必要がありますか? 前もって感謝します。
更新: わかりやすくするために、使用しているコードの簡素化されたバージョンを再投稿しています。フォームの包含要素を非表示にしようとしています (包含要素に使用している ID は実際には「#form-holder」であり、最初に非表示の div は「#thank-you」です。私の問題はセレクターではなく、それはjavascript / jQueryロジックにあります(まあ、それはロジックを理解していません:)-または、フォーム送信ボタンをクリックするロジックの継承が原因である可能性もありますコメントで述べているように、今のところ、これは機能させるためのギリシャ語のテキストですが、最終的には、Twitter のリンクなどを含む「ありがとう」のテキスト メッセージになりますが、ロジックを取得する必要があります。最初に正しく機能します。
$(document).ready(function(){
// Place ID's of all required fields here.
required = ["email"];
// If using an ID other than #email or #error then replace it here
email = $("#email");
errornotice = $("#error");
formholder = $('#form-holder');
thankyou = $("#thank-you");
// The text to show up within a field when it is incorrect
emptyerror = "Please fill out this field.";
emailerror = "Please enter a valid e-mail.";
$("#myForm").submit(function(){
//Validate required fields
for (i=0;i<required.length;i++) {
var input = $('#'+required[i]);
if ((input.val() == "") || (input.val() == emptyerror)) {
input.addClass("needsfilled");
input.val(emptyerror);
errornotice.fadeIn(750);
} else {
input.removeClass("needsfilled");
}
}
// Validate the e-mail.
if (!/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/.test(email.val())) {
email.addClass("needsfilled");
email.val(emailerror);
}
//if any inputs on the page have the class 'needsfilled' the form will not submit
if ($(":input").hasClass("needsfilled")) {
return false;
} else {
errornotice.hide();
formholder.hide();
thankyou.show();
return true;
}
});
// Clears any fields in the form when the user clicks on them
$(":input").focus(function(){
if ($(this).hasClass("needsfilled") ) {
$(this).val("");
$(this).removeClass("needsfilled");
}
});});</script>
そして、コードの上部近くに変数として formholder と thankyou を追加したことがわかります。以下は HTML のバージョンです。
<div id="form-holder">
<form id="myForm" class="form">
<p class="names form-paragraph clearfix">
<span class="first_name">
<label for="name">First Name</label>
<input type="text" required="required" name="first_name" id="first_name" /></span>
<span class="last_name">
<label for="name">Last Name</label>
<input type="text" required="required" name="last_name" id="last_name" /></span>
</p>
<p class="email form-paragraph">
<label for="email">Email*</label>
<input type="text" required="required" name="email" id="email" />
</p><p id="error">There were errors on the form, please make sure all fields are fill out correctly.</p>
<p class="small-text">* Required Field</p>
<p class="submit"><span><input type="submit" value="SUBMIT" id="formSubmit" /></span>
<span><button type="reset" value="RESET">RESET</button></span></p></form>
<div id="thank-you"><p>At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio.</p></div>