Javascript 取消选择jQuery中的文本框

Javascript 取消选择jQuery中的文本框,javascript,jquery,html,Javascript,Jquery,Html,我有一个jQuery搜索脚本,它查询PHP文件,然后将结果解析为HTML div。当没有查询处于活动状态时,文本框会自动选择,但当查询处于活动状态时,我希望不会自动选择它。目前我只能禁用文本框,这不是我想要的。我如何解决这个问题 我的jQuery脚本是: $(document).ready(function(){ $('[id^=type_]').click(function(){ type=this.id.replace('type_',''); $('

我有一个jQuery搜索脚本,它查询PHP文件,然后将结果解析为HTML div。当没有查询处于活动状态时,文本框会自动选择,但当查询处于活动状态时,我希望不会自动选择它。目前我只能禁用文本框,这不是我想要的。我如何解决这个问题

我的jQuery脚本是:

$(document).ready(function(){
    $('[id^=type_]').click(function(){
        type=this.id.replace('type_','');
        $('[id^=type_]').removeClass('selected');
        $('#type_'+type).addClass('selected');
        return false;
    });
    $('#type_search').click();
    $('#query').keyup(function(){
        var query=$(this).val();
        var url='/'+type+'/'+query+'/';
        window.location.hash=''+type+'/'+query+'/';
        document.title=$(this).val()+' - My Search';
        $('#results').show();
        if(query==''){
            window.location.hash='';
            document.title='My Search';
            $('#results').hide();
        }
        $.ajax({
            type:'GET',
            url:url,
            dataType:'html',
            beforeSend:function(){
                $('#query').prop('disabled',true);
            },
            success:function(results){
                $('#results').html(results);
            }
        });
    });
    if(window.location.hash.indexOf('#'+type+'/')==0){
        query=window.location.hash.replace('#'+type+'/','').replace('/','');
        $('#query').val(decodeURIComponent(query)).keyup();
    }
    $('#query').focus();
});
您可以使用$'query'.blur删除焦点

更新: 如果您希望发送ajax请求,而文本框仅在您认为用户已暂停键入时才失去焦点,则可以启动keyup事件的续订超时,并仅在触发ajax请求时发送该请求。这样,您可以更安全地模糊文本框:

var queryPauseTimeout;
.
.
.
.

$('#query').keyup(function(){
    if (queryPauseTimeout)
       clearTimeout(queryPauseTimeout);

    queryPauseTimeout = setTimeout(function() {
    var query=$('#query').val();
    var url='/'+type+'/'+query+'/';
    window.location.hash=''+type+'/'+query+'/';
    document.title=$('#query').val()+' - My Search';
    $('#results').show();
    if(query==''){
        window.location.hash='';
        document.title='My Search';
        $('#results').hide();
    }
    $.ajax({
        type:'GET',
        url:url,
        dataType:'html',
        beforeSend:function(){
            $('#query').prop('disabled',true);
        },
        success:function(results){
            $('#results').html(results);
        }
    });
,5000);
。 . .
.

这是我刚才评论的“答案”版本。如果使用$'query'.val.length,则可以在文本框中获取值的长度,如下所示:

var textlength = $('#query').val().length;

if(textlength <= 0)
    $('#query').focus();
else
    $('#query').blur();
我不认为。模糊;确实需要,但也不会有什么坏处

编辑1:好的,我假设您有一个页面,其中有一个搜索框和一个div标记,您的项目存储在其中,这是由AJaX实现的。我还假设,当您点击F5从而重新加载整个页面时,您的页面将重新加载,并且搜索框中已经有PHP或早期JavaScript语句的数据。然后可以替换当前的$'query'。focus;,用我上面贴的代码


编辑2:我刚刚重新阅读了你的代码,我想替换$'query'。focus;使用我的代码应该可以完全按照您的要求完成操作。

您不能删除$'query'。focus;并将自动对焦添加到字段?我不确定您想要什么,但如果您重新加载页面并将数据加载到查询文本框中,是否可以使用$'query'.val检查其长度,如果为空,是否进行对焦?请参阅我发布的答案,如果您有更多问题,我将更新该答案。这取决于您希望何时取消选择文本框?页面加载意味着整个页面加载,或者当出现AJaX请求/结果时?我更新了我的答案,请仔细阅读,看看它是否适合您的需要。我已经更新了我的答案,以更好地适应这种情况