如何select 'this' onclick?
How to select 'this' onclick?
通过触发 onClick 事件,我想 select 附加 onClick 事件的同一元素,以将 class 添加到同一元素。我尝试的是以下内容:
<div class="class1" onClick="TestFunction();">Click</div>
<script>
function TestFunction() {
$(this).addClass('active');
}
</script>
单击 div 后,应将 class "active" 添加到同一元素,结果...
<div class="class1 active" onClick="TestFunction();">Click</div>
但是这不起作用。我想知道 this
selector 在这种情况下是否有不同的工作方式。
div 元素的结构应保持不变,而且函数应保持在与 onClick 属性相同的位置。
原因是this
refers to the global 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>
使用内联处理程序时,调用的函数在 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');
});
});
通过触发 onClick 事件,我想 select 附加 onClick 事件的同一元素,以将 class 添加到同一元素。我尝试的是以下内容:
<div class="class1" onClick="TestFunction();">Click</div>
<script>
function TestFunction() {
$(this).addClass('active');
}
</script>
单击 div 后,应将 class "active" 添加到同一元素,结果...
<div class="class1 active" onClick="TestFunction();">Click</div>
但是这不起作用。我想知道 this
selector 在这种情况下是否有不同的工作方式。
div 元素的结构应保持不变,而且函数应保持在与 onClick 属性相同的位置。
原因是this
refers to the global 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>
使用内联处理程序时,调用的函数在 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');
});
});