1 回答
TA贡献1891条经验 获得超3个赞
原因是函数内部this
引用了全局Window对象。
您必须传递this
给该函数,以便您可以在函数内部引用该函数:
.active{
color:green;
font-size: 20px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="class1" onClick="TestFunction(this);">Click</div>
<script>
function TestFunction(el) {
console.log(this.constructor.name) //Window
$(el).addClass('active');
}
</script>
尽管最好避免内联事件处理程序:
$('.class1').click(function(){
$(this).addClass('active');
});
.active{
color:green;
font-size: 20px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="class1">Click</div>
TA贡献1839条经验 获得超15个赞
使用内联处理程序时,调用的函数在元素的范围内运行window,而不是在引发事件的元素范围内运行。要解决这个问题,您可以this作为参数传递:
<div class="class1" onClick="TestFunction(this);">Click</div>
function TestFunction(el) {
el.addClass('active');
}
然而,这不是一个好的做法。内联事件属性已经过时,现在被认为是不好的做法。实现此目的的更好方法是附加不显眼的事件处理程序。在普通的 JS 中,它看起来像这样:
<div class="class1">Click</div>
document.querySelectorAll('.class1').forEach(el => {
el.addEventListener('click', function() {
this.classList.add('active');
});
});
在 jQuery 中,它看起来像这样:
<div class="class1">Click</div>
jQuery($ => {
$('.class1').on('click', function() {
$(this).addClass('active');
});
});
- 1 回答
- 0 关注
- 111 浏览
添加回答
举报