$('#removeResultBtn').hide(); // 隱藏全部清除按鈕 // 處理 radio 選取狀態 $('.filter-list .form-check').click(function (e) { e.preventDefault(); $(this).find('.form-check-input').prop('checked', true); // 取得 radio 按鈕的 label let radioLabel = $(this).find('.form-check-label').text().trim().replace(/\s+/g, ' '); // 移除換行空白 // 取上一層 search-tab 按鈕文字 let buttonValue = $(this).closest('.dropdown').find('.search-tab').text().trim(); let buttonId = $(this).closest('.dropdown').find('.search-tab').attr('id'); updateSelectedOptions(buttonId, buttonValue, radioLabel); }); let filterList = []; // 篩選條件 // 更新篩選狀態 function updateSelectedOptions(id, button, radio) { page = 1; console.log('更新篩選狀態', button, radio); push_GA(button, radio); // 發送 GA if (filterList.length) { let exists = false; // 判斷是否已存在 for (let index = 0; index < filterList.length; index++) { const element = filterList[index]; // 如有重複 button 只改 radio 狀態 if (element.text === button) { element.value = radio; exists = true; // 更新篩選的值 $(`.search-tab-result .budget:contains(${button})`).find('p').text(`${button}:${radio}`); } } // 如果 filterList 中不存在則新增 if (!exists) { const newItem = { id: id, text: button, value: radio }; filterList.push(newItem); createFilterHtml(newItem); } } else { // 儲存篩選條件 filterList.push({ id: id, text: button, value: radio }) for (let index = 0; index < filterList.length; index++) { const element = filterList[index]; createFilterHtml(element); } } dataSearch(); // 搜尋 console.log('filterList', filterList); // 切換按鈕選取狀態 $('.dropdown').each(function () { let hasCheckedRadio = $(this).find('input[type="radio"]:checked').length > 0; $(this).find('.search-tab').toggleClass('active', hasCheckedRadio); }); } // 新增篩選條件 HTML function createFilterHtml(item) { let dom = `

${item.text}:${item.value}

close-btn-search
`; $('.search-tab-result').append(dom); $('#removeResultBtn').show(); } // 清除單一篩選條件 function removeBtn(element, id, val) { filterList = filterList.filter(item => item.text !== val); ; // 移除 div & active $(element).closest('.me-3').remove(); $(`#${id}`).removeClass('active'); // 移除同一層級 ul 內所有 radio 的選取狀態 $(`#${id}`).siblings('.dropdown-menu').find('input[type="radio"]').prop('checked', false); if (filterList.length === 0) { $('#removeResultBtn').hide(); } dataSearch(); } // 鍵盤 Enter 輸入 $('.keywords').on('keydown', function (event) { if (event.key === 'Enter') { dataSearch(); } }); let maxPagesMobile = 5; // 手機板最多顯示 5 頁 let maxPagesDesktop = 10; // 電腦版最多顯示 10 頁 // 分頁 function setPagination(pages) { let screenWidth = $(window).width(); let maxPages = screenWidth > 991 ? maxPagesDesktop : maxPagesMobile; function renderPagination(currentPage) { let dom = `
  • `; let startPage = Math.max(currentPage - Math.floor(maxPages / 2), 1); let endPage = Math.min(startPage + maxPages - 1, pages); if (endPage - startPage < maxPages) { startPage = Math.max(endPage - maxPages + 1, 1); } for (let index = startPage; index <= endPage; index++) { dom += `
  • ${index}
  • `; } dom += `
  • `; $('.filter-list .pagination').html(dom); updateVisibility(currentPage, pages); } // 更新上頁 & 下頁的按鈕顯示狀態 function updateVisibility(page, pages) { if (page === 1) { $('.page-link.previous').addClass('hidden'); } else { $('.page-link.previous').removeClass('hidden'); } if (page === pages) { $('.page-link.next').addClass('hidden'); } else { $('.page-link.next').removeClass('hidden'); } } window.handlePagination = function (item, type = "") { if (type === "previous" && page > 1) { page--; } else if (type === "next" && page < pages) { page++; } else if (!type) { page = parseInt($(item).find('.page-link').text()); } renderPagination(page); dataSearch(); } renderPagination(page); $(window).on('resize', function () { let newScreenWidth = $(window).width(); if ((newScreenWidth > 991 && maxPages !== maxPagesDesktop) || (newScreenWidth <= 991 && maxPages !== maxPagesMobile)) { maxPages = newScreenWidth > 991 ? maxPagesDesktop : maxPagesMobile; renderPagination(page); } }); } // 頁碼處理 function handlePagination(item, type = "") { if (type === "previous") { // 往前一頁 if (page > 1) { page--; } console.log(page); } else if (type === "next") { // 往後一頁 page++; console.log(page); } else { // 直接點擊頁碼 page = parseInt($(item).find('.page-link')[0].innerText); } // 切換選取狀態 $('.filter-list .page-item').removeClass('active'); $('.filter-list .page-item').eq(page).addClass('active'); // 設定上一頁按鈕的顯示狀態 if (page === 1) { $('.page-link.previous').addClass('hidden'); } else { $('.page-link.previous').removeClass('hidden'); } dataSearch(); // 搜尋 } // 熱搜關鍵字搜尋 $(".search-bar-keyword a").click(function () { let keyword = $(this).text(); $('.keywords').val(keyword); dataSearch(); }); // 全部清除 $("#removeResultBtn").click(function () { console.log('全部清除'); filterList.length = 0; // 清空篩選陣列 $('.keywords').val(''); // 清空搜尋欄位 $('#removeResultBtn').hide(); // 隱藏全部清除按鈕 $('.search-tab-result').empty(); // 清空篩選條件 dom // 取消選取狀態 $('.filter-list input[type="radio"]').prop('checked', false); $('.search-tab').removeClass('active'); dataSearch(); }); // 輸入框自動補全 let designerKeywordList = []; async function getKeyword() { console.log('getKeyword'); let url = '../../json/designer_keyword.json'; try { const response = await axios.get(url); designerKeywordList = response.data.designer_keyword_list; } catch (error) { console.log("error", error); } } getKeyword(); $('#keywordInput').on('input', function () { let input = $(this).val(); closeAllLists(); if (!input) { return false; } let divList = $('#autocomplete-list'); for (let i = 0; i < designerKeywordList.length; i++) { if (designerKeywordList[i].substr(0, input.length).toUpperCase() === input.toUpperCase()) { let item = $('
    '); item.html("" + designerKeywordList[i].substr(0, input.length) + "" + designerKeywordList[i].substr(input.length)); item.on('click', function () { $('#keywordInput').val($(this).text()); closeAllLists(); }); item.on('mouseenter', function () { $('#keywordInput').val($(this).text()); }); divList.append(item); } } }); // 清空自動補全列表 function closeAllLists() { $('.autocomplete-items').empty(); } $(document).on('click', function (e) { closeAllLists(); }); // 發送 GA function push_GA(text, value) { if (text === "接案預算") { push_GA_tbudge_select(value); } else if (text === "接案風格" || text === "設計風格") { push_GA_style_select(value); } else if (text === "接案類型" || text === "房屋類型") { push_GA_dtype_select(value); } else if (text === "所在縣市") { push_GA_city_select(value); } } // 接案預算 GA function push_GA_tbudge_select(key) { console.log('push_GA_tbudge_select', key); let eventLabel = ''; switch (key) { case '100萬以下': eventLabel = '1M_below'; break; case '100~200萬': eventLabel = '1M_2M'; break; case '200~300萬': eventLabel = '2M_3M'; break; case '300~400萬': case '400~500萬': case '500萬以上': eventLabel = '3M_up'; break; default: eventLabel = 'unknown'; } dataLayer.push({ 'event': eventLabel }); // 發送 Facebook Pixel 事件 fbq('trackCustom', eventLabel); } // 設計風格/接案風格 GA function push_GA_style_select(key) { console.log('push_GA_style_select', key); let eventLabel = ''; switch (key) { case 'nordic': eventLabel = 'Scandi_style'; break; case 'modern': eventLabel = 'Modern_style'; break; case 'industry': eventLabel = 'Industrial_style'; break; case 'american': eventLabel = 'American_style'; break; case 'leisure': eventLabel = 'Leisure_style'; break; case 'vanguard': eventLabel = 'Avant_garde_style'; break; case 'rustuc': eventLabel = 'Rustic_style'; break; case 'mashup': eventLabel = 'Eclectic_style'; break; case 'neoclassic': eventLabel = 'Neoclassic_style'; break; case 'luxurious': eventLabel = 'Luxurious_style'; break; case 'classical': eventLabel = 'Classical_style'; break; case 'exotic': eventLabel = 'Exotic_style'; break; case 'zen': eventLabel = 'Zen_style'; break; case 'oriental': eventLabel = 'Oriental_style'; break; case 'muju': eventLabel = 'Muju_style'; break; case 'minimalism': eventLabel = 'Minimalism_style'; break; case 'jpstyle': eventLabel = 'JP_style'; break; case 'entrylux': eventLabel = 'Affordable_Luxury_style'; break; default: eventLabel = 'unknown'; } dataLayer.push({ 'event': eventLabel }); // 發送 Facebook Pixel 事件 fbq('trackCustom', eventLabel); } // 接案類型/房屋類型 GA function push_GA_dtype_select(key) { console.log('push_GA_dtype_select', key); let eventLabel = ''; switch (key) { case 'small': eventLabel = 'small'; break; case 'standard': eventLabel = 'standard'; break; case 'big': eventLabel = 'big'; break; case 'villa': eventLabel = 'villa'; break; case 'raisehigh': eventLabel = 'raisehigh'; break; case 'middle': eventLabel = 'duplex_house'; break; case 'sample': eventLabel = 'sample'; break; case 'workspace': eventLabel = 'commercial'; break; case 'commercial': eventLabel = 'commercial'; break; case 'homestay': eventLabel = 'B&B'; break; case 'dining': eventLabel = 'dining'; break; case 'public': eventLabel = 'commercial'; break; case 'renovation': eventLabel = 'renovation_condition'; break; default: eventLabel = 'unknown'; } dataLayer.push({ 'event': eventLabel }); // 發送 Facebook Pixel 事件 fbq('trackCustom', eventLabel); } // 所在縣市 GA function push_GA_city_select(key) { console.log('push_GA_city_select', key); let eventLabel = ''; switch (key) { case '100': eventLabel = 'Taipei'; break; case '101': eventLabel = 'New Taipei'; break; case '102': eventLabel = 'Keelung'; break; case '103': eventLabel = 'Taoyuan'; break; case '104': eventLabel = 'Hsinchu'; break; case '105': eventLabel = 'Hsinchu'; break; case '106': eventLabel = 'Miaoli'; break; case '107': eventLabel = 'Taichung'; break; case '108': eventLabel = 'Nantou'; break; case '109': eventLabel = 'Changhua'; break; case '110': eventLabel = 'Yunlin'; break; case '111': eventLabel = 'Chiayi'; break; case '112': eventLabel = 'Chiayi'; break; case '113': eventLabel = 'Tainan'; break; case '114': eventLabel = 'Kaohsiung'; break; case '115': eventLabel = 'Pingtung'; break; case '116': eventLabel = 'Yilan'; break; case '117': eventLabel = 'Hualien'; break; case '118': eventLabel = 'Taitung'; break; case '119': eventLabel = 'Penghu'; break; case '120': eventLabel = 'Kinmen'; break; case '121': eventLabel = 'Lienchiang'; break; default: eventLabel = 'unknown'; } dataLayer.push({ 'event': eventLabel }); // 發送 Facebook Pixel 事件 fbq('trackCustom', eventLabel); }