首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JQuery自动完成选择功能只完成一项

JQuery自动完成选择功能只完成一项
EN

Stack Overflow用户
提问于 2014-08-17 16:25:34
回答 1查看 320关注 0票数 1

我使用jquery自动完成函数从数据库中获取项并替换字段。使用select函数和一些AJAX,它将当前的信息替换为所需的信息。但是,我需要它运行两次,并且自动完成似乎只运行select函数中的最后一行:

代码语言:javascript
运行
复制
 $(document).ready(function($){
    $('#client_name').autocomplete({
    source:'suggest_client.php', 
    minLength:2,
    select: function (event, ui) {
        $("#client_name").val(ui.item.label); // display the selected text
        $("#client_nameID").val(ui.item.value); // save selected id to hidden input
        var clientValue = ui.item.value;
        getAjax(clientValue, 'client_replace', 'client_info.php?client_id=', "");
        getAjax(clientValue, 'client_contact_div', 'get_contact.php?client_key=', "");
        return false;
        }
    });
});

getAjax代码:

代码语言:javascript
运行
复制
function getAjax(seek, getId, destUrl, reset) {
    if (seek=="") {
        document.getElementById(getId).innerHTML=reset;
        return;
    }
    if (window.XMLHttpRequest) {
        // code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    }
    else {
        // code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange=function() {
        if (xmlhttp.readyState==4 && xmlhttp.status==200) {
            document.getElementById(getId).innerHTML=xmlhttp.responseText;
        }
    }
    xmlhttp.open("GET",destUrl+seek,true);
    xmlhttp.send();
}
EN

Stack Overflow用户

回答已采纳

发布于 2014-08-17 17:13:23

问题在于getAjax()函数。在函数的开头,您需要声明xmlhttp变量:

代码语言:javascript
运行
复制
function getAjax(seek, getId, destUrl, reset) {
    var xmlhttp;
    /* ... */
}

解释

问题是范围是可变的。在getAjax()函数中,不需要首先声明xmlhttp变量(使用var关键字),就可以为它赋值。根据 keyword

在执行赋值时,将值分配给未声明的变量隐式地创建为全局变量(它成为全局对象的属性)。

因此,每次调用getAjax()时,您都要将一个值( XMLHttpRequestActiveXObject)分配给xmlhttp,因为它从未声明过,因此它被视为全局变量。因此,当对getAjax()的第二个调用在select回调的最后一行中运行时,它将在第一个请求有机会完成之前覆盖第一个调用中的xmlhttp变量。

如果在函数开始时使用var xmlhttp声明变量,那么每次对getAjax()的调用都会有它自己的xmlhttp变量实例,从而防止它被视为全局变量并被覆盖。

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25351172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档