如何在没有全局变量的情况下访问此变量
How do I access this variable without a global?
我正在尝试弄清楚如何使这项工作。
function foo(a) {
$('#this-button').show();
}
function buttonClicked() {
//get access to var a
}
.HTML
<button id="this-button" onclick="buttonClicked();">
这是我所拥有的简化版本,但想法是相同的。
Foo接受一个变量,然后使按钮可见。 单击按钮时,我想使用 var a 做更多事情。
所以就像等到单击按钮继续该功能一样?
似乎想不通。
谢谢
使用 jQuery 绑定单击处理程序。您可以使用 jQuery.Proxy 将a
绑定为参数:
function foo(a) {
$('#this-button').show().click( $.proxy( buttonClicked, null, a ) );
}
function buttonClicked(a) {
// Use a here
}
并从 html 属性中删除 JavaScript:
<button id="this-button" />
EDIT,如果你只想在单击按钮后执行一些代码,你可以做这样的事情:
function foo(a) {
// Code up here executes before the button is clicked
$('#this-button').show().unbind( 'click.foo' ).one( 'click.foo', function ( ) {
console.log( a );
// This code executes after the click, and has access to a
} );
// Code down here executes before the button is clicked
}
使用事件处理程序内容属性。这些用户可以访问:
- 元素中定义的属性(如果有)
- 元素 8 的表单所有者中定义的属性(如果有)
- 文档中定义的属性 全局
- 对象中的属性(即全局变量)。
因此,您可以将变量添加为元素的属性:
function foo(a) {
$('#this-button').show().prop('myProp', a);
}
function buttonClicked(a) {
alert(a);
}
foo(123);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="this-button" onclick="buttonClicked(myProp)">Click me</button>
当然,使用事件处理程序 IDL 属性或事件侦听器会是更好的做法。
这就是全局的原因,要么创建具有可以使用闭包的函数的对象。
您始终可以访问全局范围:
window.a = a;
但这通常是不好的做法。您能否重组代码,以便两个地方都有可用的代码。
即
var a = {}; //set a
$("#button").click(function(){
// a is available here
});
foo(a);
HTML
<button id="this-button">
.JS
function foo(a) {
$('#this-button').show();
$('#this-button').click(buttonClicked);
function buttonClicked() {
//a can be accesed here
}
}
放置按钮在 foo 中单击方法以获取变量 a 的访问权限
有几种不同的方法可以给这只猫蒙皮,但一种方法是使用闭包来捕获a
变量:
var myButton = document.getElementById('this-button');
function foo(a) {
myButton.addEventListener("click", buttonClicked(a));
...
}
function buttonClicked(a) {
return function() {
console.log('buttonClicked', a);
}
}
foo('Success!');
在这种情况下,函数buttonClicked
返回一个函数,该函数在由foo
函数运行时捕获a
的值。然后将此生成的函数传递给event handler
并在触发时运行。
请看这里的小提琴:https://jsfiddle.net/ToddT/ae5h1src/
你可以使用HTML5 localstorage
...
function foo(a) {
$('#this-button').show();
localStorage.setItem("variable_a", a); // variable in localstorage =variable_a
}
function buttonClicked() {
localStorage.getItem('variable_a');
//get access to var a
}
HTML5本地存储允许您在客户端浏览器上存储数据,并且您可以通过getItem()
访问它...更多信息: [W3学校], [jenkov.com]
使用闭包。
(function(){
var dummy_a;
function foo(a) {
//$('#this-button').show();
dummy_a = a;
}
function buttonClicked() {
//get access to var a
alert(dummy_a)
}
foo(2)
buttonClicked()
})();
相关文章:
- 如何在不知道关键字的情况下访问javascript对象值
- 如何使用javascript在不更改页面的情况下访问文件上传所选文件
- 如何在不更改Javascript页面的情况下访问用户输入的电子邮件
- 在不更改html的情况下访问特定的html元素值
- react-在不破坏封装的情况下访问DOM
- Javascript在不知道所有键的情况下访问多维数组
- 在不知道名称的情况下访问 json 对象中的元素
- 是否可以在不使用索引号的情况下访问 json 数组元素
- 如何在没有“runat=server”的情况下访问 C# 代码中的 HTML 控件
- 在不使用键的情况下访问 JSON 对象中的数组
- AngularJS:如何在不通过多个$parent导航的情况下访问最顶层的范围
- 我们可以在不将其加载到无限可滚动网页中的情况下访问 DOM 元素吗?
- 如何在不回发的情况下访问 SQL 数据库中的数据
- 如何在不使用索引器(javascript)的情况下访问数组的元素
- 在没有所有子节点的情况下访问选中节点的名称'姓名
- 数组的对象数组,如何在不使用属性名的情况下访问invidual元素
- 在不创建对象实例的情况下访问原型属性
- 如何在没有id的情况下访问画布元素
- 我的JS代码如何在没有明确缓存DOM元素的情况下访问它们
- Javascript,在不知道我处于什么页面级别的情况下访问url