2016-09-06 99 views
0

我正在使用Struts 2,jsp,js和Jquery。自动完成JQuery重置

我对jQuery的自动完成有一个小问题。

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

我有两个输入(国家和地区)。 当我选择一个国家与自动完成,我设置国家代码在一个隐藏的输入。

该地区只能匹配所选国家的国家代码(如BE,LU,...)。

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

在页面加载和关于国家代码的每个变化,我设置这样的输入自动完成:

E.g:我选择了德国和搜索法兰克福。

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

我发送给我的动作(在URL),自动完成参数 “Q”(=文本)和国家代码。

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

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

E.g

  • 1)选择DE和城市。
  • 2)选择BE。该行动将被要求DE和BE。我可以看到 我之前在DE中找到的城市(城市)。

我认为错误是我重置自动完成输入,但不知道。

我尝试调用.autocomplete(“close”),.autocomplete(“destroy”),但出现错误。

在此先感谢您的回复。

+1

嗯,你可以发布更多的代码,我们可以解决它。 –

+0

感谢您的回复。我编辑了代码。 –

+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;); 
+0

感谢您的回复。我已经尝试这个解决方案,但我得到的错误“不能分配给(new String(”source“))的属性:不是一个对象”。 –

0

谢谢你马克,我加$("#labelLocationId").unbind();删除以前的处理程序,现在它的作品!

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

这避免了绑定和解除绑定简单地慢下来。