javascript – 保存对此范围的访问权限
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 保存对此范围的访问权限,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3199字,纯文字阅读大概需要5分钟。
内容图文
![javascript – 保存对此范围的访问权限](/upload/InfoBanner/zyjiaocheng/714/ea6a978952ce40a4b9be309840e3826d.jpg)
我的颜色存储在我的按钮上的数据属性中,我想在切换中使用.但是,当我尝试使用此方法访问数据信息时,没有可用的数据.如何让我访问正确的范围?
我试图只为不包含Skip的元素切换给定的颜色.
<div>
<input id="toggleButton" type="button" value="Toggle" data-color="Red" />
</div>
<div id="toggleSet">
<div>Element</div>
<div>Skip</div>
<div>Element</div>
</div>
CSS
.ActivateRed{ color: red; }
JS
$('#toggleButton').click(function(){
$("#toggleSet div").each(function(index,element){
if( element.innerHTML != "Skip" ){
$(element).toggleClass("Activate"+$(this).data("color"));
//^this has no data to access?
//Why am I getting undefined?
}
});
});
这是我尝试的jsFiddle.我不断将Activateundefined作为类名.为什么这不能访问我的toggleButton的数据?
解决方法:
解释问题
这改变了
thisMDN的值已更改,不再引用预期的元素或值.通常这是因为范围已经改变,因此这个参考也是如此.
这包含在执行上下文中
范围是指当前的Execution ContextECMA.为了理解为什么会发生这种变化,了解这些执行上下文在JavaScript中的运行方式非常重要.
执行上下文绑定此
当控制进入执行上下文(代码正在该范围内执行)时,变量的环境被设置(词法和变量环境 – 实际上这为要输入的变量设置了一个区域,这些区域已经可访问,并且局部变量的区域是存储),并发生这种绑定.
此绑定已更改为执行上下文
这些上下文形成逻辑堆栈.结果是堆栈中更深层次的上下文可以访问先前的变量,但它们的绑定可能已被更改.每次jQuery调用回调函数时,它都会使用applyMDN更改此绑定.
callback.apply( obj[ i ] )//where obj[i] is the current element
调用apply的结果是在jQuery回调函数内部,这指的是回调函数使用的当前元素.
例如,在.each中,常用的回调函数允许.each(function(index,element){/ * scope * /}).在该范围内,此==元素为true.其结果是,如果您期望之前的这个可用,它将被绑定到不同的元素.
在jQuery回调中对此进行简要说明
如上所示,jQuery回调使用apply函数将正在调用的函数与当前元素绑定.该元素来自jQuery对象的元素数组.构造的每个jQuery对象都包含一个元素数组,这些元素与用于实例化jQuery对象的selectorjQuery API相匹配.
$(selector)调用jQuery函数(记住$是对jQuery的引用,代码:window.jQuery = window.$= jQuery;).在内部,jQuery函数实例化一个函数对象.因此虽然它可能不是很明显,但使用$()在内部使用新的jQuery().构建此jQuery对象的一部分是查找选择器的所有匹配项.然后,jQuery对象包含与选择器匹配的DOM元素的类似数组的结构.
当调用jQuery api函数时,它将在内部迭代这个类似数组的结构.对于数组中的每个项,它调用api的回调函数,将回调函数绑定到当前元素.这个调用可以在上面的代码片段中看到,其中obj是类似数组的结构,而i是用于当前元素数组中位置的迭代器.
寻找解决方案
由于jQuery倾向于无声地失败,因此很难确定发生了什么. .data()jQuery API仍然是一个有效的调用,它只返回undefined.结果,上面的代码产生了一个类名为“Activate”undefined,“Activateundefined”.
这里要认识到的重要部分是jQuery已经改变了这种绑定.为了使用先前的此绑定,该值必须存储在变量中.存储它的一个通用名称是,self,me,或者在最佳实践中,它代表的实际描述.
保存绑定工作的原因是回调的执行上下文在执行上下文堆栈中相对于保存绑定值的位置更深,因此可以访问该存储的值.
$('#toggleButton').click(function(){
var toggleBtn = this;
//^ store this into the toggleBtn variable
$("#toggleSet div").each(function(index,element){
//^ binds `this` to the current element
if( element.innerHTML != "Skip" ){
//^ we could have used `this.innerHTML` here
$(element).toggleClass("Activate"+$(toggleBtn).data("color"));
//^ re-use the stored `this` value
}
});
});
内容总结
以上是互联网集市为您收集整理的javascript – 保存对此范围的访问权限全部内容,希望文章能够帮你解决javascript – 保存对此范围的访问权限所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。