Files
JMuseum/public/js/signup_page.js
2018-02-26 14:09:18 +08:00

142 lines
6.4 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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);
}