首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >自动完成JQuery复位

自动完成JQuery复位
EN

Stack Overflow用户
提问于 2016-09-06 13:58:12
回答 3查看 1.4K关注 0票数 0

我正在使用Struts 2、jsp、js和Jquery。

关于使用Jquery的自动完成,我有一个小问题。

Jquery版本: 1.6自动完成: 2.4.4。

我有两个输入(国家和地方)。当我选择一个具有自动完成功能的国家时,我会在一个隐藏的输入中设置国家代码。

本地必须只匹配国家代码(如BE、LU、.)被选中的国家。

在JQuery中,我在隐藏的输入中添加了" on ('change')“事件。当我选择国家时,我触发了改变。

在页面加载和国家代码的每次更改上,我在输入中设置自动完成,如下所示:

例句:我选择了德国,并寻找法兰克福。

代码语言:javascript
运行
复制
function setSuggestLocation(){
    // Add auto-completion
    var location = $("#labelLocationId"); 
    var countryCodeSelected = ($("#countryCode").val() != '' ? '?option=' + $("#countryCode").val() : '');
    var urlToAction = "myAction.action" + countryCodeSelected;

    location.autocomplete(urlToAction, {
        minChars: 2,
        onItemSelect: function(item) {
            $("#locationCode").val(item.data);
        }
    }); 
}

我将自动完成参数"q“(= text)和国家代码发送到我的操作(在url中)。

我可以在我的行动,我可以选择我想要的城市在网页。

但是,如果我更改X倍的国家和我改变的位置在自动完成,动作将调用X倍,我改变了国家代码。

E.g

  • 1)选择DE和城市。
  • 2)选择BE。将要求对DE和BE采取行动。我可以看到我以前为DE找到的那个城市。

我认为这个错误是我将自动完成设置为输入的地方,但不确定。

我试图调用.autocomplete(“关闭”),.autocomplete(“破坏”),但我有错误。

提前谢谢你的忏悔。

EN

回答 3

Stack Overflow用户

发布于 2016-09-06 14:07:43

仅仅是认为问题就在于设置自动完成。也许您可以使用这段代码来在它更改时设置url。

代码语言:javascript
运行
复制
// Getter
var source = $( ".selector" ).autocomplete( "option", "source" );

// Setter
$( ".selector" ).autocomplete( "option", "source", [ "c++", "java", "php", "coldfusion", "javascript", "asp", "ruby" ] );

因此,在您的实例中,代码将是

代码语言:javascript
运行
复制
   $( "#location" ).autocomplete( "option", "source", myaction.action?param1=countryCode; );
票数 0
EN

Stack Overflow用户

发布于 2016-09-06 14:55:24

谢谢马克,我已经添加了$("#labelLocationId").unbind();来删除以前的处理程序,现在它开始工作了!

票数 0
EN

Stack Overflow用户

发布于 2016-09-06 15:19:15

下面是另一个选项,我使用myApp命名空间,但这很容易理解,然后在需要时设置国家代码参数:

代码语言:javascript
运行
复制
var myApp = myApp || {
  baseURL: "${pageContext.request.contextPath}/base/getCitiesSuggestion.action",
  location: {},
  locationSelector: "#labelLocationId",
  countryCodeSelected: "",
  urlToAction: "",
  countryCodeSelector: "#countryCode",
  locationCodeSelector: "#locationCode",
  countryCode: jQuery(this.countryCodeSelector),
  setCountry: function() {
    this.countryCodeSelected = (this.countryCode.val() != '' ? '?option=' + this.countryCode.val() : '');
    this.urlToAction = this.baseURL + this.countryCodeSelected;
  },
  setSuggestLocation: function() {
    var me = this;
    this.location = $(this.locationSelector);
    this.location.autocomplete(me.urlToAction, {
      minChars: 2,
      onItemSelect: function(item) {
        $(me.locationCodeSelector).val(item.data);
      }
    });
  }
};


// set stuff up
myApp.setCountry();
// set the autocomplete (once only)
myApp.setSuggestLocation();

///some code here.....
// changed country, set it again:
myApp.setCountry();

这样就避免了绑定和解除绑定,因为这会使事情慢下来。

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

https://stackoverflow.com/questions/39350913

复制
相关文章

相似问题

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