|
27 | 27 | // 將參數分割為 key value |
28 | 28 | pkey = param.split('=')[0] || ''; |
29 | 29 | pval = param.split('=')[1] || ''; |
30 | | - // 不處理 is_ajax |
31 | | - if (pkey == 'is_ajax') continue; |
| 30 | + // 不處理 is_ajax 與 page |
| 31 | + if (pkey == 'is_ajax' || pkey == 'page') continue; |
32 | 32 | // 若未建過則建新陣列 |
33 | 33 | if (!pmap[pkey]) { |
34 | 34 | pmap[pkey] = pval.split(','); |
|
304 | 304 | } |
305 | 305 | }); |
306 | 306 | }, |
| 307 | + // 初始化分頁按鈕 |
| 308 | + _initPagin: function () { |
| 309 | + var wgt = this; |
| 310 | + // 重新綁定分頁鈕的 click |
| 311 | + $('.pagination a').off() |
| 312 | + .click(function(e){ |
| 313 | + e.preventDefault(); |
| 314 | + wgt.ajaxLoad($(this).attr('href')); |
| 315 | + }) |
| 316 | + }, |
307 | 317 | // 更新頁面 |
308 | | - ajaxLoad: function () { |
| 318 | + ajaxLoad: function (n, opts) { |
309 | 319 | // 打開遮罩 |
310 | 320 | loading(); |
311 | | - // 建立參數 |
312 | | - this._buildParams(); |
313 | | - // 取得不帶參數的 url |
314 | | - var n = window.location.href.split('?')[0] |
315 | | - p = [], |
316 | | - wgt = this; |
317 | | - // 組出 ajax url |
318 | | - n += '?'; |
319 | | - for (var key in this._params) { |
320 | | - // 將所有參數加入陣列 |
321 | | - // 陣列 ['1', '2', '3'].join(',') => 字串 '1,2,3' |
322 | | - p.push(key+'='+this._params[key].join(',')); |
| 321 | + var wgt = this; |
| 322 | + if (!n) { |
| 323 | + var p = []; |
| 324 | + // 建立參數 |
| 325 | + this._buildParams(); |
| 326 | + // 取得不帶參數的 url |
| 327 | + n = window.location.href.split('?')[0] |
| 328 | + // 組出 ajax url |
| 329 | + n += '?'; |
| 330 | + for (var key in this._params) { |
| 331 | + // 將所有參數加入陣列 |
| 332 | + // 陣列 ['1', '2', '3'].join(',') => 字串 '1,2,3' |
| 333 | + p.push(key+'='+this._params[key].join(',')); |
| 334 | + } |
| 335 | + // 陣列 ['a=1', 'b=2'].join('&') => 字串 'a=1&b=2' |
| 336 | + n += p.join('&'); |
323 | 337 | } |
324 | | - // 陣列 ['a=1', 'b=2'].join('&') => 字串 'a=1&b=2' |
325 | | - n += p.join('&'); |
| 338 | + n = decodeURIComponent(n); |
| 339 | + // 若有 is_ajax=true 就先清掉 |
| 340 | + n = n.replace('is_ajax=true', ''); |
326 | 341 | // 存下本次 URL |
327 | 342 | this._previousURL = n; |
328 | | - if (window.history && window.history.pushState) { |
329 | | - window.history.pushState(n, document.title, n); |
| 343 | + // 如果未指明要略過更新 history 便更新 history |
| 344 | + if (!opts || !opts.skipPushHistory) { |
| 345 | + if (window.history && window.history.pushState) { |
| 346 | + var state = { |
| 347 | + type: 'ucstate', |
| 348 | + url: n |
| 349 | + }; |
| 350 | + window.history.pushState(state, document.title, n); |
| 351 | + } |
330 | 352 | } |
331 | 353 | $.ajax({ |
332 | 354 | url: n, |
|
362 | 384 | $dir.css({ |
363 | 385 | 'position': 'fixed', 'left': '0', 'top': '0', 'right': '0', 'bottom': '0', |
364 | 386 | 'margin': '20px', 'padding': '20px', 'border-radius': '15px', 'z-index': '999999', |
365 | | - 'background-color': 'white', 'color': '#DD406F', 'font-size': '28px', |
| 387 | + 'background-color': 'white', 'color': '#DD406F', 'font-size': '22px', |
366 | 388 | 'overflow-y': 'auto' |
367 | 389 | }); |
368 | 390 | $cross.css({ |
|
375 | 397 | '1. Ctrl + 滑鼠左鍵 Click 連續選取/取消選取左方或上方選項<br/>', |
376 | 398 | '2. 滑鼠左鍵 Click 選取/取消選取左方或上方選項並載入內容<br/>', |
377 | 399 | '3. 點擊上方選項取消選取時, 會增加一個 "第二層區塊" 於左方選項上方, 方便將一度選取過又刪除的項目再重新選取而不必重新於左方選項中翻找<br/>', |
378 | | - '4. 第二層區塊中點擊 "全部清除" 可移除整個區塊, 點擊選項文字部份可重新選取選項, 點擊選項叉叉鈕可將該選項自第二層區塊中移除<br/><br/>', |
| 400 | + '4. 第二層區塊中點擊 "全部清除" 可移除整個區塊, 點擊選項文字部份可重新選取選項, 點擊選項叉叉鈕可將該選項自第二層區塊中移除<br/>', |
| 401 | + '5. 網址在載入資料時會更新, 可用上一頁/下一頁切換並方便分享<br/><br/>', |
379 | 402 | '注意:<br/>', |
380 | | - '1. 需在做任何選取操作之前啟用, 若已有做過選取操作, 請先滑鼠左鍵 Click 點擊任一選項<br/>', |
| 403 | + '1. 需在做任何選取操作之前啟用, 若啟用前已有做過選取操作, 啟用後請先滑鼠左鍵 Click 點擊任一選項<br/>', |
381 | 404 | '2. 連續選取後需有一載入動作後下方分頁才可正確動作<br/>', |
382 | | - '3. 原始網頁內容均忠實呈現, 僅稍加修改操作流程、添加本操作說明及第二層選取區' |
| 405 | + '3. 原始網頁內容均忠實呈現, 僅稍加修改操作流程、添加本操作說明及第二層選取區與更新網址' |
383 | 406 | ].join('')); |
384 | 407 | // 點關閉鈕時 |
385 | 408 | $cross.on('click', function () { |
|
398 | 421 | this._initSelections(); |
399 | 422 | // 初始化右側上方選項 |
400 | 423 | this._initConditions(); |
| 424 | + // 初始化分頁按鈕 |
| 425 | + this._initPagin(); |
401 | 426 | // 顯示操作說明 (首次) |
402 | 427 | this._showDirections(); |
403 | 428 | } |
404 | 429 | }; |
405 | 430 | // 初始化 |
406 | 431 | window.uccustomize.findproduct.init(); |
| 432 | + // 綁定 history popstate |
| 433 | + $(window).bind('popstate', |
| 434 | + function(e) { |
| 435 | + var state = e.originalEvent.state; |
| 436 | + // 判斷是否為 ucstate |
| 437 | + if (state && state.type && state.type=='ucstate') { |
| 438 | + // 載入內容, 並指明略過更新 history 狀態 |
| 439 | + window.uccustomize.findproduct.ajaxLoad(state.url, {skipPushHistory: true}); |
| 440 | + } |
| 441 | + }); |
407 | 442 | })(); |
0 commit comments