3 回答
TA贡献1824条经验 获得超6个赞
JavaScriptthis
关键字指的是它所属的对象。
根据使用位置的不同,它具有不同的值:
在一个方法中,this
指的是所有者对象。单独而言, this 指的是全局对象。
在函数中,this
指的是全局对象。
在函数中,在严格模式下,this
是未定义的。
在事件中,this
指的是接收事件的元素。
喜欢的方法call()
,并apply()
可以指this
任何对象。
TA贡献1793条经验 获得超6个赞
上面的代码不起作用,因为this是window您的情况下的对象。即使您在 HTML 中手动创建按钮,那么单击处理程序中的 this 也将是window对象。
一个简单的经验法则:this将是调用函数的上下文的所有者。
以下是上述假设的一个小演示以及正确的方法:
function vTest(){
console.log("this is same as window", this==window);
}
// Correct way to attach click event handlers to new elements.
function validate(e){
console.log("validating");
if(e.target.checked)
console.log('Checked');
}
window.addEventListener("load", function(){
var aCheckbox = document.createElement("INPUT");
aCheckbox.setAttribute('type', 'checkbox');
aCheckbox.addEventListener('click', validate);
document.body.append(aCheckbox);
});
<input type="checkbox" onclick="vTest()"></input><br>
TA贡献2019条经验 获得超9个赞
我创建了一个示例,无需使用this. 它可能会有所帮助。
<div id="app"></div>
<p>checked boxes: <span id="checkedBoxes">0</span></p>
<script>
const getCheckedAmount = () => {
const checkedBoxes = document
.querySelectorAll('input[type="checkbox"]:checked');
const amountOfCheckedBoxes = Array
.from(checkedBoxes).length;
document
.querySelector('#checkedBoxes')
.innerHTML = amountOfCheckedBoxes;
};
const addCheckBoxes = () => {
const todoApp = document.querySelector("#app");
const checkboxes = [1, 2, 3, 4, 5]
.map(
number =>
`<input type="checkbox" onclick="getCheckedAmount()">${number}</input>`
)
.join(" ");
todoApp.innerHTML = `<div>${checkboxes}</div>`;
};
addCheckBoxes();
</script>
添加回答
举报