2015-02-23 22 views
0

我已經修改了DSpace的搜索框中弄成這個樣子: enter image description here護搜索字符串幻影主題

用戶輸入搜索字符串搜索框中,並按下回車得到搜索結果。這會刷新頁面,因此用戶最初輸入的搜索字符串會丟失。我想在搜索框中保留搜索字符串。我試圖用javascript cookies來達到這個目的,因爲我覺得它是最簡單的解決方案之一。但是我沒有得到理想的結果。 下面是搜索表單代碼:

<form id="ds-search-box" method="post"> 

         <xsl:attribute name="action"> 

          <xsl:value-of select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='contextPath']"/> 
          <xsl:value-of 
            select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='search'][@qualifier='simpleURL']"/> 

         </xsl:attribute> 
     <div class="wrap right rounded"> 

       <input type="text" class="search left rounded" id="text-search" placeholder="Type name of book title, author, subject , keywords..."> 
       <xsl:attribute name="name"> 
            <xsl:value-of 
              select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='search'][@qualifier='queryField']"/> 
           </xsl:attribute> 

      <!--</input> 

       <input class="button-field" type="submit" i18n:attr="value" 
            value="xmlui.general.go">--> 

           <xsl:attribute name="onsubmit"> 
           <xsl:text> 

            var a = document.getElementById(&quot;text-search&quot;); 
       document.cookie = a.value; 
       var s=document.cookie; 
       alert(s); 

       var form = document.getElementById(&quot;ds-search-box&quot;);    


            form.action= 



           </xsl:text> 
            <xsl:text>&quot;</xsl:text> 
            <xsl:value-of 
              select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='contextPath']"/> 
            <xsl:text>/handle/&quot; + radio.value + &quot;</xsl:text> 
            <xsl:value-of select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='search'][@qualifier='simpleURL']"/> 
            <xsl:text>&quot; ; </xsl:text> 
           <xsl:text> 



           </xsl:text> 
           </xsl:attribute> 
     </input>  

     </div> 
    </form> 

我保存的文本框的值在cookie中。

而且我已經列入page-structure.xsl文件的JavaScript部分的代碼訪問的cookie:

<script type="text/javascript"> 
     document.getElementById(&quot;text-search&quot;).value=document.cookie; 

</script> 

回答

0

原來我沒有被存儲和檢索正確的餅乾。我改變了代碼如下其現在的工作:

代碼設置cookie:

<input class="button-field" type="submit" i18n:attr="value" 
            value="xmlui.general.go" style="visibility:hidden"> 

           <xsl:attribute name="onclick"> 
           <xsl:text> 

      <!--Poonam (code added to create cookie)--> 
            var a = document.getElementById(&quot;text-search&quot;); 
       //alert(a.value); 

       document.cookie = "search=; expires=Thu, 01 Jan 1970 00:00:00 UTC"; //delete previous cookie 

       document.cookie = &quot;search&quot;+&quot;=&quot;+a.value+&quot;;&quot;; //create new cookie 
       //alert("Hello"+document.cookie); 
      <!--Poonam--> 

       var form = document.getElementById(&quot;ds-search-box&quot;);    


            form.action= 



           </xsl:text> 
            <xsl:text>&quot;</xsl:text> 
            <xsl:value-of 
              select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='contextPath']"/> 
            <xsl:text>/handle/&quot; + radio.value + &quot;</xsl:text> 
            <xsl:value-of select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='search'][@qualifier='simpleURL']"/> 
            <xsl:text>&quot; ; </xsl:text> 
           <xsl:text> 



           </xsl:text> 
           </xsl:attribute> 

     </input> 

每當用戶執行搜索時,搜索字符串存儲在一個名爲search的cookie。代碼首先刪除前一個cookie,然後再創建一個新的cookie。

<script type="text/javascript"> 

     window.onload = function(){ 


       var cookie_string = getCookie("search"); 

       //alert(cookie_string); 
       document.getElementById(&quot;text-search&quot;).value = cookie_string; 



     } 

     function getCookie(cname) { 
       var name = cname + "="; 
      var ca = document.cookie.split(';'); 
       for(var i=0; i!=ca.length; i++) { 

       var c = ca[i]; 

       while (c.charAt(0)==' ') c = c.substring(1); 

       if (c.indexOf(name) == 0) 
       return c.substring(name.length,c.length); 
       } 
      return ""; 
    } 


    </script> 

這會讀取cookie並將其設置在搜索框中。