关于addEventListener的问题
本帖最后由 jincongno.1 于 2020-2-10 17:38 编辑var checklist = document.getElementById("checklist");
var items = checklist.querySelectorAll("li");
var inputs = checklist.querySelectorAll("input");
for (var i = 0;i <items.length; i++) {
items.addEventListener("click",editItem);
inputs.addEventListener("blur",updateItem);//失焦的事件
inputs.addEventListener("keypress",itemKeypress);//键盘
}
function editItem() {
this.className = "edit";
var input = this.querySelector("input");
input.focus();//有了这个之后 点击之后他光标会到第一个字母前面去(获取焦点)
input.setSelectionRange(0,input.value.length); //该方法可以为当前元素内的文本设置被选中范围
}
function updateItem () {
this.previousElementSibling.innerHTML = this.value;
//previousElementSibling返回指定元素的前一个兄弟元素 innerHTML获取兄弟元素里面的值然后更改掉
//接下来关闭编辑模式
this.parentNode.className ="";
}
function itemKeypress (event) {
if (event.which === 13) {
updateItem.call(this);
}
}
想请问一下 我在itemKeypress函数中调用updateItem需要.call (this) 不然会报错
我试了不传this调用 他的this变成widows……
在 inputs i].addEventListener("blur",updateItem)里 有给updateItem传东西吗
有这么个疑惑。希望大佬指点
代码出处是小甲鱼老师搬运的web教学 js常用事件实战2
实在没明白你的问题...
不二如是 发表于 2020-2-10 21:14
实在没明白你的问题...
您看这样问可以吗。在我失焦的时候调用这个函数 看上去是空荡荡的updateItem(我不清楚它实际上有没有传值进去)但是我在别的地方调用这个函数的时候需要这样 updateItem.call(this); 我去掉过后半部分 他报错大概的意思就是找不到在哪里了。或者说 emmm 在 inputs.addEventListener("blur",updateItem);//失焦 在这里调用的时候 有给updateItem传值吗? 还是明白不了的话 也是我表达的问题 不然您帮我删了这个贴也是可以的!很感谢您帮忙看了 你这个只是绑定了一个事件啊,传值是没有的.单纯的调用你的function updateItem里面的this自然是指windows.只有调用call传你那个指定的this进去才能正常工作.
页:
[1]