使用DSpace 4.2 Mirage主题中的javascript cookie在文本框中保留搜索字符串

时间:2015-02-23 06:49:03

标签: javascript xslt cookies dspace

我已将DSpace搜索框修改为以下内容: enter image description here

用户在搜索框中输入搜索字符串,然后按Enter键以获取搜索结果。这将刷新页面,因此用户最初输入的搜索字符串将丢失。我想在搜索框中保留搜索字符串。我正在尝试使用javascript cookie实现这一点,因为我觉得它是最简单的解决方案之一。但我没有得到理想的结果。 这是搜索表单的代码:

<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>

1 个答案:

答案 0 :(得分:0)

原来我没有正确存储和检索cookie。我改变了下面的代码,它现在正在工作:

设置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并将其设置在搜索框中。