let selections = []; $("input.btn-selection").on("click", btnTheme_Click); $("#btnSubmit").on("click", btnSubmit_Click); function setAlert(message) { if ($("#divAlert").children().length > 0) $("#divAlert").children().remove(); if (message) { $("#divAlert").append($("
" + message + "
")); } } function btnTheme_Click(event) { event.stopPropagation(); let target = event.target; let index = selections.indexOf(target.dataset.index); if ( index == -1 ) { if ( selections.length < maxSel ) { selections.push(target.dataset.index); $(target).addClass("btn-selected"); } } else { $(target).removeClass("btn-selected"); selections.splice(index, 1); } } function btnSubmit_Click() { if (selections.length != maxSel) { setAlert("請選擇" + maxSel + "個主題!"); return; } let data = { selections: selections }; $.ajax({ url: "/votetheme", method: "POST", contentType: "application/json", data: JSON.stringify(data), success: VoteTheme_ServerResponse, error: VoteTheme_OnError }); } /** * 將票選資料成功傳送至伺服器後,伺服器所回應的訊息。 * @param {Object} response 伺服端傳來的訊息。 */ function VoteTheme_ServerResponse(response) { if (response.isOK) { window.location.replace(response.url); } else { setAlert("錯誤: " + response.message); } } /** * 當票選資料無法傳送至伺服器時的處理。 * @param {jqXHR} jqXHR XMLHttpRequest物件。 * @param {string} statusText 錯誤名稱。 * @param {string} error 錯誤敘述。 */ function VoteTheme_OnError(jsXHR, statusText, error) { setAlert("無法將資料傳送至伺服端,請稍後再嘗試。"); }