2015-03-13 109 views
0

请,帮助修复的bug:代码快讯目前不确定的,而不是按钮的内部内容警报按钮的内部内容

function registerClickHandler() { 
    $('#clickme').click(function() { 
    setTimeout(function() { 
     alert(this.innerHTML); 
    }, 200); 
    }); 
} 
+0

这是因为setTimeout函数现在已经失去了'this'的范围,请尝试将你正在尝试引用的内容传递给function()参数中的setTimeout函数。 – 2015-03-13 09:09:19

+0

这是一个招聘考试的问题。 – Jazz 2016-07-13 12:10:36

回答

3

this超时处理程序内是没有按钮

function registerClickHandler() { 
    $('#clickme').click(function (e) { 
     setTimeout(function() { 
      alert(e.currentTarget.innerHTML); 
     }, 200); 
    }); 
} 
1

尝试在setTimeout之前获取值

function registerClickHandler() { 
     $('#clickme').click(function() { 
      var value=this.innerHTML; 
      setTimeout(function() { 
       alert(value); 
      }, 200); 
     }); 
    } 
0

尝试将单击事件处理呃在功能之外。在调用setTimout之前,还要将'this'的值传递给变量。稍后在setTimout中使用这个变量。了解更多关于Javascrpt原型here

$(document).ready(function(){ 
 
    $('#clickme').click(function() { 
 
    var me = this; 
 
     setTimeout(function() { 
 
      alert(me.innerHTML); 
 
     }, 200); 
 
     }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="clickme">click me</div>

1

在Java脚本this指向最后一个功能,里面的超时处理程序不是按钮,这就是为什么你所得到的错误。

而且它是一个很好的做法实现这种功能或onclicks使用on.('click', function(){...})

下面你可以看到我的例子:

$(document).ready(function(){ 
    $('#clickme').on('click', function (e) { 
     setTimeout(function() { 
      alert(e.currentTarget.innerHTML); 
     }, 200); 
    }); 
}); 

你可以看看,在这里运行:http://jsfiddle.net/gon250/6qwk0g1t/1/