Upload All

This commit is contained in:
Alan
2018-02-26 14:09:18 +08:00
parent 42d3a3fc46
commit 46257f08b0
1024 changed files with 204324 additions and 0 deletions

142
public/js/signup_page.js Normal file
View File

@ -0,0 +1,142 @@
let divErrorMessages = $("div#divErrorMessages");
let txtLName = $("input#txtLName");
let txtFName = $("input#txtFName");
let txtEmail = $("input#txtEmail");
let txtUsername = $("input#txtUsername");
let txtPassword = $("input#txtPassword");
let txtConPassword = $("input#txtConPassword");
let vldLName = /^[a-zA-Z\u2E80-\u2FDF\u3190-\u319F\u3400-\u4DBF\u4E00-\u9FFF\uF900-\uFAFF]{1,16}$/;
let vldFName = /^([a-zA-Z\u2E80-\u2FDF\u3190-\u319F\u3400-\u4DBF\u4E00-\u9FFF\uF900-\uFAFF]{1,16})([\ ]*)([a-zA-Z]{0,16})$/;
let vldEmail = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
let vldUsername = /^([a-zA-z]{1,1})([0-9a-zA-z]{3,15})$/;
let vldPassword = /(^[0-9a-zA-Z_?!@#+-]{5,16}$)/;
let formElements =
{
"lastName": txtLName,
"firstName": txtFName,
"email": txtEmail,
"username": txtUsername,
"password": txtPassword,
"confirmPassword": txtConPassword
// termsAgreement: 是否接受「JMuseum 條款」
};
//當使用者按下「註冊」按鈕時
$("button#btnSubmit").on("click", (e) => {
e.preventDefault();
var resultLName = vldLName.test(txtLName.val());
var resultFName = vldFName.test(txtFName.val());
var resultEmail = vldEmail.test(txtEmail.val());
var resultUsername = vldUsername.test(txtUsername.val());
var resultPassword = vldPassword.test(txtPassword.val());
var resultConPassword = (txtConPassword.val().length > 0) && ( txtConPassword.val() == txtPassword.val() );
iterativelyTagInputError(formElements, [resultLName, resultFName, resultEmail, resultUsername, resultPassword, resultConPassword]);
switch (false) {
case resultLName:
showDangerAlert( txtLName.val().length == 0 ? "「姓」為必要輸入的欄位,請輸入您的大名。" : "「姓」欄位輸入錯誤請輸入小於17字的英文或中文字。" );
break;
case resultFName:
showDangerAlert( txtFName.val().length == 0 ? "「名」為必要輸入的欄位,請輸入您的大名。" : "「名」欄位輸入錯誤請輸入小於33字的英文或中文字。" );
break;
case resultEmail:
showDangerAlert( txtEmail.val().length == 0 ? "\"Email\"為必要輸入的欄位,請輸入您的信箱地址。" : "請在\"Email\"欄位中輸入正確的格式。");
break;
case resultUsername :
if (txtUsername.val().length == 0) showDangerAlert("\"Username\"為必要輸入的欄位,請輸入您想要的帳號名稱。");
else if ( /^[0-9]$/.test(txtUsername.val().substr(1, 1)) ) showDangerAlert("\"Username\"欄位中的第一字僅能為英文字母。");
else showDangerAlert( "\"Username\"欄位中必須輸入大於3且小於16的數字或英文字母。" );
break;
case resultPassword :
showDangerAlert( txtPassword.val().length == 0 ? "\"Password\"為必要輸入的欄位請輸入您想要的密碼長度限為5~16字。" : "\"Password\"欄位中必須輸入數字、英文字母或「_?!@#+-」中任一字元。");
break;
case resultConPassword :
showDangerAlert( txtConPassword.val().length == 0 ? "\"Confirm Password\"為必要輸入的欄位,請再次\"Password\"欄位中的密碼。" : "請在\"Confirm Password\"欄位中輸入與\"Password\"欄位中相符的密碼。" );
break;
default:
if ($("input#chkJMuseumTerms:checked").length > 0) {
sendInformation();
} else {
showDangerAlert("請勾選表示同意「JMuseum 條款」");
}
break;
}
});
//傳送資料至伺服端
function sendInformation() {
var data = { lastName : txtLName.val(), firstName : txtFName.val(), email : txtEmail.val(),
username : txtUsername.val(), password : txtPassword.val(), confirmPassword : txtConPassword.val(),
termsAgreement : ($("input#chkJMuseumTerms:checked").length > 0) };
$.ajax( {
url : "/newmembersignup",
method : "POST",
contentType : "application/json",
data : JSON.stringify(data),
success : serverRespone
});
}
/**
* 接收伺服器回應
* @param {Object} respone 伺服器的訊息回應物件。
*/
function serverRespone(respone) {
// 若伺服器回應「驗證通過」,則轉跳到目標網頁位置
if (respone.isOK) {
window.location.replace(respone.redirect);
}
// 若驗證不通過,則印出錯誤訊息與其相關的欄位。
else{
setServerErrorMessage(respone.field, respone.message);
}
}
/**
* 設置由伺服端傳來的錯誤訊息
* @param {String} field 指定的錯誤訊息欄位。
* @param {String} message 由伺服器端回應的錯誤訊息。
*/
function setServerErrorMessage(field, message) {
// 先清除所有的錯誤標記
for (let prop in formElements)
formElements[prop].parent().removeClass("has-error");
// 若錯誤的欄位在表單元素清單中(Form Elements),則標記錯誤
if (field in formElements) {
formElements[field].parent().addClass("has-error");
}
showDangerAlert(message);
}
//疊代檢查每一對input是否檢查正確若正確則正常顯示若不正確則加上紅色邊框效果
function iterativelyTagInputError(elements, validationResults) {
let elemList = Object.values(elements);
for (let i = 0; i < elemList.length; i++)
tagInputError(elemList[i], validationResults[i]);
}
//是否標示指定輸入方塊為「輸入錯誤」
function tagInputError(element, validationResult) {
if (validationResult) {
element.parent().removeClass("has-error");
}
else if (!element.parent().hasClass("has-error")) {
element.parent().addClass("has-error");
}
}
// 顯示錯誤資訊
function showDangerAlert(message) {
var alert = $("<div id='divDangerAlert'></div>").attr("role", "alert").addClass("alert alert-danger").text(message);
divErrorMessages.children("#divDangerAlert").remove();
divErrorMessages.append(alert);
}
// 測試用的驗證成功訊息
function testSuccessMsg() {
var alert = $("<div id='divDangerAlert'></div>").attr("role", "alert").addClass("alert alert-success").text("驗證成功");
divErrorMessages.children("#divDangerAlert").remove();
divErrorMessages.append(alert);
}