自动完成JQuery重置

时间:2016-09-06 13:58:12

标签: javascript jquery jquery-ui autocomplete

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

我对Jquery的自动完成有一点疑问。

Jquery版本:1.6 自动填充:2.4.4。

我有两个输入(国家和地区)。 当我选择具有自动填充功能的国家/地区时,我会将国家/地区代码设置为隐藏输入。

该地区必须仅匹配所选国家/地区的国家/地区代码(如BE,LU,...)。

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

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

例如:我选择德国并搜索法兰克福。

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" (=文字)和国家代码。

我可以在行动中获取参数,然后我可以在网页中选择我想要的城市。

但是,如果我更改国家/地区的X倍,并且我更改了自动填充中的位置,则操作将被调用X次我更改了国家/地区代码。

E.g

  • 1)选择DE和一个城市。
  • 2)选择BE。将针对DE和BE调用该操作。我可以看到 我之前为DE找到的城市(城市)。

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

我尝试打电话.autocomplete("关闭"),. autocomplete(" destroy")但我收到了错误。

提前感谢您的回复。

3 个答案:

答案 0 :(得分:0)

只是认为问题在于设置自动完成。也许您可以使用此代码在更改时设置URL。

// Getter
var source = $( ".selector" ).autocomplete( "option", "source" );

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

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

   $( "#location" ).autocomplete( "option", "source", myaction.action?param1=countryCode; );

答案 1 :(得分:0)

谢谢Mark,我已添加$("#labelLocationId").unbind();删除以前的处理程序,现在它已经有效了!

答案 2 :(得分:0)

这是另一种选择,我用myApp命名这些东西,但这很容易理解,然后在需要时设置国家代码参数:

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();

这可以避免绑定和取消绑定,这会简化速度。