我仔细检查了浏览器中的控制台 这一行:
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
这里发生了什么?我确信所有其他代码行都是未经编辑的。
答案 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
属性