我的Jquery自动完成源函数中有一个显示图像,它不起作用。
我在chrome开发人员工具的源函数内部的放映中设置了一个断点。该函数被调用,但是什么也没有发生。我的自动完成功能之外的隐藏和显示有效。
这是我的代码。
public boolean saveTweet(Tweet tweet, User user){
Tweeted tweetRelation = new Tweeted();
tweetRelation.setUser(user);
tweetRelation.setTweet(tweet);
tweetRelation.setDate(tweet.getDate());
try {
//TODO: Mentions!? Deal with them!
tweetrepository.save(tweet);
tweetedRepository.save(tweetRelation);
$(“#divAuthorSearch”)。show();我的源函数中应该显示一个图像,然后该图像应在$(“#divAuthorSearch”)。hide();之后隐藏。被称为。
答案 0 :(得分:0)
几件事:
1)我无法确定
的目的<script>
$("#divAuthorSearch").hide();
$("#divAuthorSearch").show();
</script>
...为什么要在页面加载时立即隐藏某些内容,而稍后再显示一次?用户可能甚至不会看到它更改,然后再次更改。但是无论如何,此后图像仍然可见。我假设您最初希望将其隐藏,以便在自动完成启动时将其显示出来?如果是这样,那么您就不需要JS了,只需在"display:none;"
标记本身上放置div
样式,例如:
<div id="divAuthorSearch" style="padding: 3px;display:none;">
2)自动完成完成后,您永远不会看到图像然后显示然后隐藏的另一个原因是,您实际上并没有在运行.hide()
命令之前等待AJAX调用返回结果。 AJAX调用是异步。这意味着,一旦执行$ .ajax命令,就会立即执行下一行JavaScript。它不等待响应。相反,浏览器的网络处理将在后台运行请求,并在收到服务器的响应后执行传递给“成功”选项的回调函数。
因此,如果只希望在收到响应后才隐藏图像,则只需将.hide()
命令移至该函数中,使其等待执行而不是立即运行它:
source: function(request, response){
$("#divAuthorSearch").show();
$.ajax({
"url" :"/koauthor/SelectEmployee",
"type" : "POST",
"data" : JSON.stringify({"name": request.term}),
"contentType" : "application/json",
"success" : function(data) {
response(data);
$("#divAuthorSearch").hide();
},
"error" : function(error)
{
alert("error: "+JSON.stringify("There was an error!"));
}
});
}
P.S。这里有一些background reading,您可能会找到很多信息。