只是一个想法,但您是否考虑过将值存储在 javascript 变量中?如果您只在 javascript 中使用它,为什么还要将它放在隐藏字段或元素中呢?
如果您不使用命名空间/模块,只需在全局范围内声明您的变量,但如果您是,您可以将其存储在使用它的模块的范围内。
这种方法的唯一考虑是该变量将在页面刷新时被重置,但如果您使用服务器上的值,只需在脚本中,那应该没问题。
一般来说,如果服务器需要能够读取它,我只会使用隐藏输入。
编辑
作为对评论的回应,如果您明智地使用您的 javascript,其中包括使用命名空间,那么这种方法与使用“变量持有者”混淆您的标记相比具有一定的优雅性
一个非常快速的命名空间脚手架......
在名为 MyProject.Global.js 的文件中
//This function is truly global
function namespace(namespaceString) {
var parts = namespaceString.split('.'),
parent = window,
currentPart = '';
for (var i = 0, length = parts.length; i < length; i++) {
currentPart = parts[i];
parent[currentPart] = parent[currentPart] || {};
parent = parent[currentPart];
}
return parent;
}
在名为 MyProject.MyPage.Ui.js 的文件中
namespace('MyProject.MyPage');
MyProject.MyPage.Ui = function () {
var self = this;
self.settings = {};
function init(options) {
$.extend(self.settings, options);
//any init code goes here, eg bind elements
setValue();
};
};
//this is considered a "private" function
function setValue(){
$('#categories > li > a').click(function (e) {
e.preventDefault();
self.settings.myValue = $(this).attr('data-value');
refreshGrid('Reference');
});
}
function getValue(){
return self.settings.myValue;
}
//any function within this return are considered "public"
return {
init: init,
getValue: getValue
};
};
终于在你的页面...
$(document).ready(function () {
var ui = new MyProject.MyPage.Ui();
ui.init();
}
那么在任何时候你都可以使用......
MyProject.MyPage.getValue()