在函数执行之间保留变量(Javascript)
我有一个JavaScript函数,每次单击其中一个链接时都会运行。这些函数首先检查所单击链接的id,然后运行if语句。根据链接的id,定义了不同的变量 所有这些都是可行的,但问题是一些链接定义了一个变量,而其他链接定义了另一个变量,我需要保留以前函数执行中定义的变量,以便为函数的其他执行进行定义 例如:在函数执行之间保留变量(Javascript),javascript,variables,Javascript,Variables,我有一个JavaScript函数,每次单击其中一个链接时都会运行。这些函数首先检查所单击链接的id,然后运行if语句。根据链接的id,定义了不同的变量 所有这些都是可行的,但问题是一些链接定义了一个变量,而其他链接定义了另一个变量,我需要保留以前函数执行中定义的变量,以便为函数的其他执行进行定义 例如: $(document).ready(function() { $(".sidebar a").click(function(event) { event.preventDefault
$(document).ready(function()
{
$(".sidebar a").click(function(event) {
event.preventDefault()
var targetID = $(this).attr("data-target")
$("#" + targetID).attr("src", $(this).attr("href"))
var element = $(this).attr("class")
if (element == "submit") {
var submit = $(this).attr("user")
alert("1")
} else if (element == "view") {
var view = $(this).attr("user")
alert("2")
}
})
window.history.replaceState({}, 'logs', '/file/path?submit=' + submit + '&' + 'view=' + view)
})
谢谢在外部范围内定义变量:
$(document).ready(function () {
var submit;
var view;
$(".sidebar a").click(function (event) {
event.preventDefault();
var targetID = $(this).attr("data-target");
$("#" + targetID).attr("src", $(this).attr("href"));
var element = $(this).attr("class")
if (element == 'submit') {
submit = $(this).attr("user")
alert("1")
} else if (element == 'view') {
view = $(this).attr("user")
alert("2")
}
});
});
在外部范围中定义变量:
$(document).ready(function () {
var submit;
var view;
$(".sidebar a").click(function (event) {
event.preventDefault();
var targetID = $(this).attr("data-target");
$("#" + targetID).attr("src", $(this).attr("href"));
var element = $(this).attr("class")
if (element == 'submit') {
submit = $(this).attr("user")
alert("1")
} else if (element == 'view') {
view = $(this).attr("user")
alert("2")
}
});
});
在函数外部创建var submit和view,使其具有全局作用域。在函数外部创建var submit和view,使其具有全局作用域。您可以使用JQuery的
.data()
函数在匹配的元素上存储任意数据
例如:
$(this).data("submit", $(this).attr("user")); // set a value
var submit = $(this).data("submit"); // retrieve a value
这将把数据放在JQuery对元素的知识的上下文中,因此它可以在函数调用之间甚至在不同事件之间共享。您可以使用JQuery的
.data()
函数在匹配的元素上存储任意数据
例如:
$(this).data("submit", $(this).attr("user")); // set a value
var submit = $(this).data("submit"); // retrieve a value
这将把数据放在JQuery对元素的知识的上下文中,因此它可以在函数调用之间甚至在不同事件之间共享。您可以使用外部函数,它只声明一些变量并返回内部函数。内部函数可以从外部作用域访问变量,外部作用域对函数的每次调用都保持不变 例子 现场演示
您可以使用一个外部函数,它只声明一些变量并返回一个内部函数。内部函数可以从外部作用域访问变量,外部作用域对函数的每次调用都保持不变 例子 现场演示
你缺少了一堆分号……我确信我的代码很潦草,但我知道我目前的工作原理,我所需要的只是让变量从函数的内部到外部。我不是说它不应该只是看起来混乱,或者使用分号,但这样的混合很混乱,双引号和单引号也一样。尝试用草率的代码解决问题总是一个坏主意,因为当需要重构时,它已经是一个巨大的烂摊子了。你缺少了一堆分号……我确信我的代码是草率的,但我知道我目前的工作原理,我所需要的只是让变量从函数的内部到外部,我不是说它不应该只是看起来混乱,或者使用分号,或者不使用分号,但是像那样混合是混乱的,双引号和单引号也是如此。试图用草率的代码解决问题总是一个坏主意,因为到了重构的时候,它已经是一个大烂摊子了。应该尽量减少使用全局变量。哈哈!我的观点是,为了保持这些变量可用,它们需要在方法范围之外…在点击处理程序范围之外,是的。但是当然不需要使它们成为全局的,因为可以在ready处理程序的作用域中声明它们,甚至可以引入一个额外的作用域。应该尽量减少使用全局变量。哈哈!我的观点是,为了保持这些变量可用,它们需要在方法范围之外…在点击处理程序范围之外,是的。但是当然不需要使它们成为全局的,因为可以在ready handler的范围内声明它们,甚至可以引入一个额外的范围。我已经尝试过了,这听起来是个好主意,但不幸的是,它做的事情和以前一样。@zggz12它做的事情是什么?它做的事情与定义函数中的变量完全相同。它总是将函数运行中未定义的变量设置为undefined@zggz12您必须从分配中删除
var
,然后单击处理程序中的submit
和view
。是你干的吗?(参见上面的代码)我已经尝试过了,这听起来是个好主意,但不幸的是它做的事情和以前一样。@ZGZ12它做什么?它做的事情与定义函数中的变量完全相同。它总是将函数运行中未定义的变量设置为undefined@zggz12您必须从分配中删除var
,然后单击处理程序中的submit
和view
。是你干的吗?(参见上面的代码)我需要做些什么来初始化它吗?…我尝试将“$(this).data”(“submit“,$(this).attr”(“user”))放在if语句中,并将“var submit=$(this).data”(“submit”)放在处理变量的部分之前,它不起作用。我需要做些什么来初始化它吗?…我试图将“$(this.data”(“submit”),$(this.attr”(“user”))放在if语句中,并在处理变量的部分之前放置“var submit=$(this.data”(“submit”)”,但它不起作用。