0

当谈到 jQuery 时,我有点像新手,我正在尽力理解它。以下是两段代码,我将不胜感激您的反馈。我的最终目的是在要查询的框中输入什么,我将分别用下面的两段代码讨论这两个问题。

function update_results(){
$.ajax({
    url: '{base}modules/search.php?q=' + $("#q").val(),
    success: function(data) {
    $('#q').bind('keyup', function() { $('#results').fadeIn(400).delay(500).html(data); } ).keyup();
 }
});
}

这段代码一旦将请求抛出到服务器的循环中并导致浏览器显着变慢,但运行良好(跟上输入的字符)。

function update_results(){
$.ajax({
    url: '{base}modules/search.php?q=' + $("#q").val(),
    success: function(data) {
    $('#q').bind('keyup', function() { $('#results').fadeIn(400).delay(500).html(data); } );
 }
});
}

这段代码没有循环问题,但是每当我键入发送到我的 search.php 页面的查询时,总是缺少最后两三个字符。

以下是触发上述两种情况的 HTML 元素:

<h3>Site Search</h3>
    <input id="q" type="text" onkeyup="update_results()" value="Type in a search term..." onFocus="this.value='';" /><br>
    <a href="javascript:clear_results();">(Reset)</a> | <a href="search/">(Advanced Search)</a>
    <div id="results" style="text-align: left; font-size: 11px;"></div></center>
    </div> 

我想要的只是将#q 中的内容发送到search.php?q= 并让它返回数据并将其放在#results div 中。我还想在其中放置某种计时器,这样它就不会在每次输入字符时查询服务器,因为在人完成键入后,由某个任意时间值指定,或者每隔几秒钟。一旦这个人完成打字,显然我希望它停止敲击服务器。

我在互联网上环顾四周,如果看起来我没有做过任何研究,我深表歉意。相反,我昨天才开始学习jQuery。

感谢您的宝贵时间,如果这是一个非常新手的问题,我提前道歉。

4

1 回答 1

0

你总是落后几个角色的原因可能与此有关。

success: function(data) {
    $('#q').bind('keyup', function() { $('#results').fadeIn(400).delay(500).html(data); } ).keyup();
}

这些“绑定”动作越来越多,每次从 AJAX 请求返回更多结果。因此,每次触发 keyup 操作时,都会设置所有这些不同的结果集。我不确定这是否有意义,但这不是最容易遵循的代码。

尝试将此部分更改为

success: function(data) {
    $('#results').show().html(data);
}

如果这看起来更好,请尝试使用您的fadeIn() 和delay() 来调整它。

您可能想要添加的另一件事是这样的:

$('#q').blur(function(){ $('#results').hide() });

这将使您在离开文本字段(模糊)时隐藏结果。

于 2012-05-13T05:04:30.823 回答