鱼C论坛

 找回密码
 立即注册
查看: 2337|回复: 3

[已解决]关于addEventListener的问题

[复制链接]
发表于 2020-2-10 17:32:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 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[i].addEventListener("click",editItem);
    inputs[i].addEventListener("blur",updateItem);//失焦的事件
    inputs[i].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-3-15 20:56:31
你这个只是绑定了一个事件啊,传值是没有的.单纯的调用你的function updateItem里面的this自然是指windows.只有调用call传你那个指定的this进去才能正常工作.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-10 21:14:21 | 显示全部楼层
实在没明白你的问题...

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-11 17:59:59 | 显示全部楼层
不二如是 发表于 2020-2-10 21:14
实在没明白你的问题...

您看这样问可以吗。在我失焦的时候调用这个函数 看上去是空荡荡的updateItem(我不清楚它实际上有没有传值进去)  但是我在别的地方调用这个函数的时候需要这样 updateItem.call(this); 我去掉过后半部分 他报错大概的意思就是找不到在哪里了。或者说 emmm 在 inputs[i].addEventListener("blur",updateItem);//失焦 在这里调用的时候 有给updateItem传值吗?   还是明白不了的话 也是我表达的问题 不然您帮我删了这个贴也是可以的!很感谢您帮忙看了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-15 20:56:31 | 显示全部楼层    本楼为最佳答案   
你这个只是绑定了一个事件啊,传值是没有的.单纯的调用你的function updateItem里面的this自然是指windows.只有调用call传你那个指定的this进去才能正常工作.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-7-2 14:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表