为什么自动完成源功能中的显示不起作用?

时间:2019-06-04 20:57:34

标签: javascript jquery html

我的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();之后隐藏。被称为。

1 个答案:

答案 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,您可能会找到很多信息。