0

我的布局页面标题中有一个 jQuery 插件:

<script src="@Url.Content("~/Scripts/js/kendo.web.min.js")"></script>
<script src="@Url.Content("~/Scripts/app/jsCommon.js")"></script>
<script src="@Url.Content("~/Scripts/app/Layout.js")"></script>

和我的 layout.js:

    (function ($) {
    var Layout = function (node, options) {
        this.node = node;
        this.options = $.extend({
            url: ""
        }, options);
        $(this.node).find('.HButton').bind('click', $.proxy(this.HButtonClicked, this));
    };

    Layout.prototype = {
        constructor: Layout,
        _loadBackground: function () {
            debugger;
            //load second now 'Common.currentTarget' have been lost
            $(Common.currentTarget).removeClass();
            $(Common.currentTarget).addClass(".HButton_Selected");
        },

        HButtonClicked: function (e) {
            debugger;
            //load first
            Common.currentTarget = e.currentTarget;
        }
    }

    $.fn.Layout = function (options) {
        return this.each(function () {
            $(this).data('Layout', new Layout(this, options));
        });
    };

}(jQuery));

在另一边,我有一个这样的共享存储库 javascript 对象:

function common() { 

}

common.currentTarget = null;

var Common = new common();

然后在另一个页面中,我触发了如下事件:

<script>
  $(document).ready(function () {
    var layout = $("#layout").data("Layout");
    $(layout).trigger("_loadBackground")
  });
</script>

当 HButton 元素单击第一次发生时,我正在“Common.currentTarget”中写入对象,并且当我查看变量但当另一个页面完全加载然后触发事件“_loadBackground”时它成功保存“ Common.currentTarget" 已经丢失了,我的问题是如何定义一个像这样的静态变量在我的整个页面中是永久的?

4

2 回答 2

1

您可以从 javascript 中设置一个 cookie 来存储数据,然后从另一个页面访问该 cookie。Cookie 可以仅在浏览器会话期间持续存在,或者您可以给它们一个过期时间。对于 HTML5,有本地存储

于 2013-08-23T14:44:42.170 回答
0

当页面更改或刷新时,所有 JavaScript 数据都会被卸载。JavaScript 本身无法解决这个问题。您将不得不将数据发送到服务器。可能最简单的方法是将数据存储在隐藏字段中:

<input type="hidden" id="storable" />
....
document.getElementById("storable").value = // whatever value you want to store

然后在服务器端,您可以将该数据传输到新页面。

如果您要重定向客户端,请改用查询参数。

于 2013-08-23T14:42:31.653 回答