2014-07-17 69 views
0

我想在我的頁面打開一個jQuery DateBox彈出窗口,它修改了窗口的哈希值,所以後面的瀏覽器按鈕關閉了彈出窗口,而不是去瀏覽器歷史記錄中的上一個網站。JQueryMobile彈出窗口不顯示時,將哈希追加到URL

<div data-role="page" id="base-layout"> 
    <div data-role="content" id="my-content-layout"> 
     <div id="divDesde"> 
      <label for="divDesde" style="text-align: left;">From Date:</label> 
      <input data-theme="c" name="fechaDesde" id="fechaDesde" type="text" data-role="datebox" data-options='{"enablePopup": true, "useNewStyle":true, "centerHoriz": true, "centerVert": true, "mode":"datebox", "overrideDateFormat": "%d/%m/%Y"}' value="" class="required" required="required" /> 
     </div> 
     <div id="divHasta" class="desdeHastaDiv"> 
      <label for="fechaHasta" style="text-align: left;">To Date:</label> 
      <input data-theme="c" name="fechaHasta" id="fechaHasta" type="text" data-role="datebox" data-options='{"enablePopup": true,"useNewStyle":true, "centerHoriz": true, "centerVert": true, "mode":"datebox", "overrideDateFormat": "%d/%m/%Y"}' value="" /> 
     </div> 
    </div> 
</div> 
<script> 
    $(document).on("pageinit", "#base-layout", function() { 

     $('#fechaHasta').on('datebox', function(e, p) { 
      if (p.method === 'open') { 
       window.location.hash = "#fechaHasta"; 
      } 
      if (p.method === 'close') { 
       window.location.hash = ''; 
      } 

     }); 
     $('#fechaDesde').on('datebox', function(e, p) { 
      if (p.method === 'open') { 
       window.location.hash = "#fechaDesde"; 
      } 
      if (p.method === 'close') { 
       window.location.hash = '' 
      } 

     }); 
    }); 
</script> 

的問題是 - 修改散列似乎以某種方式與彈出螺絲,它不打開第一次點擊。實際上它確實打開了,但是一旦哈希被追加,它就會自動關閉。

我創建了一個小提琴here雖然我看不到散列;我想它沒有被顯示,因爲jsFiddle層在頁面上。你可以點擊瀏覽器關閉彈出窗口。如果您單擊輸入上的日曆圖標,第一次沒有顯示時,如果再次點擊則是。

+0

設置location.hash時不包括散列符號(#):http://www.w3schools.com/jsref/prop_loc_hash.asp – ezanker

+0

試圖在我的小提琴上 - 也沒有工作。我必須雙擊才能顯示彈出窗口。 –

+1

如果你添加一個延遲,你可以看到發生了什麼:http://jsfiddle.net/WUhwV/2/。 Datebox啓動彈出窗口,然後當設置散列時,彈出窗口關閉。第二次單擊散列已經設置,所以彈出窗口保持打開狀態。我沒有解決方案,但至少你現在可以看到,改變哈希導致彈出關閉... – ezanker

回答

0

Jquery mobile的內部導航模型使用散列來跟蹤頁面狀態。它會監聽散列更改事件,並且在您自己更新散列時,它會將其作爲頁面更改並以某種方式決定關閉日期框。您可以在「哈希和Ajax驅動的頁面導航」下閱讀有關它的信息here

幸運的是,解決方案非常簡單。只需從您的代碼中刪除所有的哈希更新部分。由於jquery mobile本身在點擊日曆時添加了散列,因此當點擊瀏覽器後退按鈕時,您可以指望它關閉日期框。

- 編輯 -

好了,用下面的代碼替換腳本似乎是工作。我在我的機器上檢查過它。

$(document).on("pageinit", "#base-layout", function() { 

     $('#fechaHasta').on('vmousedown', function() { 
        window.location.hash = "fechaHasta"; 
     }); 

     $('#fechaDesde').on('vmousedown', function() { 
        window.location.hash = "fechaHasta"; 
     }); 

     $('#fechaHasta').on('datebox', function(e, p) { 
      if (p.method === 'close') { 
       window.location.hash = '' 
      } 
     }); 

     $('#fechaDesde').on('datebox', function(e, p) { 
      if (p.method === 'close') { 
       window.location.hash = '' 
      } 
     }); 
}); 

當你在「vmousedown」事件中添加哈希,日曆還沒有開和jQuery移動無關,收在這一點上,所以你可以認爲這是一個快速和骯髒的黑客。

+0

感謝您的洞察,但不幸的是,在datebox上使用「usepopup」選項時,它不會修改哈希。這隻在使用Datebox上的對話框選項時發生,但我想使用彈出式菜單 –

+0

^您是對的。它沒有按照我原先以爲的方式工作。但我想我已經找到了解決方案,請檢查我的編輯答案。 –

+0

現在會嘗試,但我擔心這不會與觸摸事件(我的網站是專爲移動設備) –