我正在使用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
我认为错误是我将自动完成重置为输入但不确定的地方。
我尝试打电话.autocomplete("关闭"),. autocomplete(" destroy")但我收到了错误。
提前感谢您的回复。
答案 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();
这可以避免绑定和取消绑定,这会简化速度。