无法读取属性' substring'在setTimeout中放入行后未定义

时间:2017-09-10 13:59:35

标签: jquery typeerror

我仔细检查了浏览器中的控制台 这一行:

document.getElementById("role_show_" + $(this).attr("id").substring(7, 9)).style.display = "block";

正常执行。但当我把它放在这样的setTimeout时:

setTimeout(function() {
    document.getElementById("role_show_" + $(this).attr("id").substring(7, 9)).style.display = "block";
}, 400);

控制台显示以下错误:
Uncaught TypeError: Cannot read property 'substring' of undefined

这里发生了什么?我确信所有其他代码行都是未经编辑的。

2 个答案:

答案 0 :(得分:2)

setTimeout函数使您的$(this)与您希望的范围不同。 要使其正常工作,请在调用setTimeout函数之前将$(this)保存到变量。

var that = $(this);
setTimeout(function() {
    document.getElementById("role_show_" + $(this).attr("id").substring(7, 9)).style.display = "block";
}, 400);

现在,您可以基本上使用$(this)来访问setTimeout功能中的that

答案 1 :(得分:1)

这是因为$(this)。当您在函数内部时,您可以访问函数本身,并且该函数没有id属性