$('#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); } } page = 1; setTimeout(() => { dataSearch(); // 搜尋 }, 0) 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(); if (id === "keyword") { // 判斷函數是否存在 if (typeof getAllSearchCount === 'function') { getAllSearchCount(); } } } // 鍵盤 Enter 輸入 $('.keywords').on('keydown', function (event) { if (event.key === 'Enter') { page = 1; dataSearch("keyword"); } }); // 點擊 tag 進行搜尋 $(document).on('click', '.tag-item', function (event) { event.preventDefault(); // 阻止默認行為 event.stopPropagation(); // 阻止冒泡 const tag = $(this).data('tag'); $(".keywords").val(tag); 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); page = 1; 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(); }); // 取得目前網址參數 const queryString = window.location.search; const urlParams = new URLSearchParams(queryString); // 判斷網址是否有 keyword if (urlParams.has('keyword')) { const keywordValue = urlParams.get('keyword'); console.log('網址 keyword', keywordValue); $(".keywords").val(keywordValue); // page = 1; // isFirstLoad = false; // // dataSearch(); } // 發送 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); } else if (text === "房屋坪數") { push_GA_area_select(value); } else if (text === "房屋狀況") { push_GA_condition_select(value); } } // 房屋狀況 GA function push_GA_condition_select(key) { console.log('push_GA_condition_select', key); let eventLabel = ''; switch (key) { case '新成屋': eventLabel = 'new_house'; break; case '毛胚屋': eventLabel = 'bare_shell'; break; case '老屋翻新': eventLabel = 'renovation_condition'; break; case '自地自建': eventLabel = 'self-build'; break; case '中古屋': eventLabel = 'second_hand'; break; default: eventLabel = 'unknown'; } dataLayer.push({ 'event': eventLabel }); // 發送 Facebook Pixel 事件 fbq('trackCustom', eventLabel); } // 房屋坪數 GA function push_GA_area_select(key) { console.log('push_GA_area_select', key); let eventLabel = ''; switch (key) { case '20坪以下': eventLabel = '20_below'; break; case '21~30坪': eventLabel = '21_30'; break; case '31~50坪': eventLabel = '31_50'; break; case '51坪以上': eventLabel = '50_up'; break; default: eventLabel = 'unknown'; } dataLayer.push({ 'event': eventLabel }); // 發送 Facebook Pixel 事件 fbq('trackCustom', eventLabel); } // 接案預算 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 '北歐風': eventLabel = 'Scandi_style'; break; case '現代風': eventLabel = 'Modern_style'; break; case '工業風': eventLabel = 'Industrial_style'; break; case '美式風': eventLabel = 'American_style'; break; case '休閒多元': eventLabel = 'Leisure_style'; break; case '前衛風': eventLabel = 'Avant_garde_style'; break; case '鄉村風': eventLabel = 'Rustic_style'; break; case '混搭風': eventLabel = 'Eclectic_style'; break; case '新古典': eventLabel = 'Neoclassic_style'; break; case '奢華風': eventLabel = 'Luxurious_style'; break; case '古典風': eventLabel = 'Classical_style'; break; case '異國風': eventLabel = 'Exotic_style'; break; case '日式蟬風': eventLabel = 'Zen_style'; break; case '東方風': eventLabel = 'Oriental_style'; break; case '無印風': eventLabel = 'Muju_style'; break; case '簡約風': eventLabel = 'Minimalism_style'; break; case '日式風': eventLabel = 'JP_style'; break; case '輕奢風': 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 '小坪數': eventLabel = 'small'; break; case '標準格局': eventLabel = 'standard'; break; case '大坪數': eventLabel = 'big'; break; case '別墅': eventLabel = 'villa'; break; case '挑高樓層': eventLabel = 'raisehigh'; break; case '樓中樓': eventLabel = 'duplex_house'; break; case '實品/樣品屋': eventLabel = 'sample'; break; case '工作空間': case '商業空間': case '公共空間': eventLabel = 'commercial'; break; case '民宿旅館': eventLabel = 'B&B'; break; case '餐飲空間': eventLabel = 'dining'; break; case '老屋翻新': 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 '台北市': eventLabel = 'Taipei'; break; case '新北市': eventLabel = 'New Taipei'; break; case '基隆市': eventLabel = 'Keelung'; break; case '桃園市': eventLabel = 'Taoyuan'; break; case '新竹縣': eventLabel = 'Hsinchu'; break; case '新竹市': eventLabel = 'Hsinchu'; break; case '苗栗縣': eventLabel = 'Miaoli'; break; case '台中市': eventLabel = 'Taichung'; break; case '南投縣': eventLabel = 'Nantou'; break; case '彰化縣': eventLabel = 'Changhua'; break; case '雲林縣': eventLabel = 'Yunlin'; break; case '嘉義縣': eventLabel = 'Chiayi'; break; case '嘉義市': eventLabel = 'Chiayi'; break; case '台南市': eventLabel = 'Tainan'; break; case '高雄市': eventLabel = 'Kaohsiung'; break; case '屏東縣': eventLabel = 'Pingtung'; break; case '宜蘭縣': eventLabel = 'Yilan'; break; case '花蓮縣': eventLabel = 'Hualien'; break; case '台東縣': eventLabel = 'Taitung'; break; case '澎湖縣': eventLabel = 'Penghu'; break; case '金門縣': eventLabel = 'Kinmen'; break; case '連江縣': eventLabel = 'Lienchiang'; break; default: eventLabel = 'unknown'; } dataLayer.push({ 'event': eventLabel }); // 發送 Facebook Pixel 事件 fbq('trackCustom', eventLabel); }