<!DOCTYPE html>
<html>
<head>
<script src="lib/jquery-3.4.1.min.js" ></script>
<script src="lib/zepto.js" ></script>
</head>
<body>
<div class ="scroller"></div>
</body>
</html>
<script>
function insertMessageText(message, success, error) {
var content = $('<div class="l-row l-center"></div>');
content.html(message);
$(".scroller").append(content);
if ($.isFunction(success)) {
success.apply(content.get(0), arguments);
}
}
insertMessageText("<i class='mui-icon icon-tongzhi'></i>正在为您转接人工服务,请稍候...",
function() {
setTimeout(function() {
$(this).remove();
}, 2000);
})
</script>
###的确是楼上说的 this 指向的问题。
insertMessageText("<i class='mui-icon icon-tongzhi'></i>正在为您转接人工服务,请稍候...",
function() {
var that = this;
setTimeout(function() {
$(that).remove();
}, 2000);
})
下面这样也可以
insertMessageText("<i class='mui-icon icon-tongzhi'></i>正在为您转接人工服务,请稍候...",
function() {
setTimeout(() => {
$(this).remove();
}, 2000);
})
这样还可以
insertMessageText("<i class='mui-icon icon-tongzhi'></i>正在为您转接人工服务,请稍候...",
function() {
setTimeout(function() {
$(this).remove();
}.bind(this), 2000);
})
问题就是因为你用function包裹了,里面的指向 windows 或者 undefined 了。
es6 方案就是箭头函数,老的方案就是 that 保存一下。
this作用域的问题吧, 可以这么写:
function insertMessageText(message, success, error) {
var content = $('<div class="l-row l-center"></div>');
content.html(message);
$(".scroller").append(content);
if ($.isFunction(success)) {
success.apply(content.get(0), arguments);
}
}
insertMessageText("<i class='mui-icon icon-tongzhi'></i>正在为您转接人工服务,请稍候...",
function() {
var self = this;
setTimeout(function() {
$(self).remove();
}, 2000);
})