我想将某些内容的值存储在我的网页上供以后使用 一些javascript函数。我想在我所拥有的地方做这样的事情 一个ID为CategoryID的div,然后将其作为HTML放入其中。
<div id="CategoryID"></div>
$('#categories > li > a').click(function (e) {
e.preventDefault();
$('#CategoryID').html = $(this).attr('data-value')
refreshGrid('Reference');
});
然后在内部函数如refreshGrid(以及其他一些函数)中,我可以得到这样的值:
var categoryID = $('#CategoryID').val();
这似乎是存储临时变量的好方法吗?怎么样 HTML5,有一些方法来存储值,而不必将它们放在一个 div或类似的东西。我只需要有一个存储在某些中的值 在页面上的方式。
还有一个问题。如果我存储该值,这是正确的方法:
$('#CategoryID').html = $(this).attr('data-value')
答案 0 :(得分:2)
请使用HiddenField
使用jquery
存储变量,如下所示:
var tempvalue= $(this).attr('data-value');
$('#my-hidden-field').val(tempvalue);
希望这对你有所帮助。
答案 1 :(得分:2)
使用网页上的隐藏字段。例如。
<INPUT TYPE=HIDDEN NAME="customerId" VALUE="1234567">
然后在JQuery中使用.val
来处理这些值。
答案 2 :(得分:2)
我有时会根据具体情况使用隐藏输入。
<input type="hidden" name="CategoryID" id="CategoryID" />
然后像这样检索它:
var categoryID = $('#CategoryID').val();
我使用输入,因为我觉得html不是页面的标记不应该在那里。
有时最简单的方法就是将服务器中的变量输出到脚本中。
ASP.NET示例:
<script type="text/javascript">
//<!--
var categoryID = <%= <output value from server goes here> %>;
//-->
</script>
答案 3 :(得分:1)
函数val()
获取元素的值。但只有输入具有值,因此您应使用隐藏输入来存储数据:
<input id="CategoryId" type="hidden" />
但是,您可以访问任何属性,如下所述。请注意attr()
已旧,新功能名称为prop()
- &gt;有关attr()
和prop()
答案 4 :(得分:1)
你应该尝试使用HTML5中引入的localStorage API,如果你热衷于此,那么将它存储在隐藏字段中是可行的。
var idForStorage = $('#CategoryID').val();
window.localStorage.setItem('keyToId', idForStorage);
并从localStorage
获取它var fetchedId = window.localStorage.getItem('keyToId');
注意:localstorage只将值存储为字符串,请记住! :)
此外,如果您想要更旧的浏览器兼容,请不要忘记检查localStorage是否存在并实施不同的解决方案。
的内容
if(typeof(window.localStorage) !== 'undefined'){
//set item or do whatever
} else {
//implement other solution or throw an exception
}
祝你好运!
答案 5 :(得分:1)
只是一个想法,但你考虑过将值存储在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()
答案 6 :(得分:0)
有三种方法可以根据需要存储值:
SessionStorage:不支持任何地方,但有垫片。它允许您存储仅为会话持续的值。例如:
sessionStorage.setItem('key', 'value')
sessionStorage.getItem('key', 'value')
这仅接受字符串作为键和值。如果要存储对象,可以使用JSON.stringify
存储对象,稍后使用JSON.parse
检索它们。
答案 7 :(得分:0)
还有一个问题。如果我存储该值,这是正确的方法:
在jQuery中使用Data-
属性的更简单方法是使用.data()
方法。
<body id="CategoryData" data-value1="someone" data-value2="sometwo">
....
alert( $("#CategoryData").data('value1') ); // popup with text: someone
alert( $("#CategoryData").data('value2') ); // popup with text: sometwo
就个人而言,我宁愿将与项目相关的所有数据存储在包装器Div
或其他元素中,并使用jquery.data。
<table data-locationid="1">
<tr data-personid="1">
<td>Jon</td>
<td>Doe</td>
</tr>
<tr data-personid="2">
<td>Jane</td>
<td>Doe</td>
</tr>
</table>
HTML5数据 - *属性
从jQuery 1.4.3开始,HTML 5数据属性将自动引入jQuery的数据对象。在jQuery 1.6中改变了嵌入破折号属性的处理,以符合W3C HTML5规范。
答案 8 :(得分:0)
如果您想将值存储在JavaScript的一部分中以便从另一部分访问,我只使用一个变量:
var categoryID = null; // set some kind of default
$('#categories > li > a').click(function (e) {
e.preventDefault();
categoryID = $(this).attr('data-value');
refreshGrid('Reference');
});
稍后当您需要该值时,只需直接访问categoryID
。
还有一个问题。如果我存储该值,这是正确的方法
如果您确实想将值设置为div元素的内容,则可以使用jQuery的.html()
方法或非jQuery .innerHTML
属性:
$('#CategoryID').html( $(this).attr('data-value') );
// or
$("#CategoryID")[0].innerHTML = $(this).attr('data-value');
但如果您不想使用变量,最好使用其他答案中提到的隐藏输入而不是div。
答案 9 :(得分:0)
对于浏览器兼容性,其他人建议使用隐藏字段更明智。但出于探索性原因,如果您想使用HTML5,它会提供WebStorage。有关详细信息,请查看http://sixrevisions.com/html/introduction-web-storage/
此外,还有一个名为Lawnchair的框架,适用于需要轻量级,自适应,简单且优雅的持久性解决方案的html5移动应用程序。