对于国家/地区字段,系统会检测并默认为加拿大。对于城市字段,用户键入加拿大城市名称,填充Facebook-style。
国家/地区列表和城市列表都使用AJAX和JSON填充,使用代理从远程数据库获取(通过PHP查询)。
使用MaxMind's GeoIP PHP API将该国家/地区默认为用户的原籍国。
当用户选择其他国家/地区时,必须将其双字母ISO代码作为参数传递给城市输入,以便驱动它的查询可以搜索所选国家/地区的城市。
例如,IP地址在加拿大的用户可以选择美国。发生这种情况时:
以下PHP代码段代理将城市列表检索到远程服务器:
echo file_get_contents( 'http://server/city.dhtml?q=' .
urlencode( $_GET['q'] ) );
jQuery tokenInput函数似乎没有提供传递其他内容的机制。相关的jQuery片段如下。
以下代码获取国家/地区代码和国家/地区列表。它将用户的国家/地区设置为默认国家/地区。
// Where in the world?
$.getJSON( 'geoip.dhtml', function( data ) {
country = data[0].id;
});
// Select from countries that have significant amounts of data.
$.getJSON( 'country.dhtml', function( data ) {
var h = '';
var len = data.length;
for( var i = 0; i < len; i++ ) {
var s = '';
// Make the person's own country the default selection.
if( data[i].id == country ) {
s = '" selected="selected"';
}
h += '<option value="' + data[i].id + s + '">' + data[i].name + '</option>';
}
$('#country').html(h);
});
以下代码下载城市列表。 tokenInput
函数自动将q
参数传递给city.dhtml
的“本地版本”内的代码(PHP源代码片段如上所示)。 q
参数是用户为城市键入的文本。
$('#city').tokenInput( 'city.dhtml', {
hintText: "Type a city name.",
tokenLimit: 1,
classes: {
tokenList: "token-input-list-facebook",
token: "token-input-token-facebook",
tokenDelete: "token-input-delete-token-facebook",
selectedToken: "token-input-selected-token-facebook",
highlightedToken: "token-input-highlighted-token-facebook",
dropdown: "token-input-dropdown-facebook",
dropdownItem: "token-input-dropdown-item-facebook",
dropdownItem2: "token-input-dropdown-item2-facebook",
selectedDropdownItem: "token-input-selected-dropdown-item-facebook",
inputToken: "token-input-input-token-facebook"
}
});
city.dhtml
必须按国家/地区代码过滤城市。
如果不使用Cookie,您如何向city.dhtml
提供国家/地区代码?
最新版本的令牌输入支持JSONP,这会有用吗?
谢谢!
答案 0 :(得分:2)
问题是,一旦设置了输入,就无法更改tokenInput
URL参数。虽然也许可以删除现有的tokenInput
并在每次选择新国家时重新创建它,但解决方案将是一个黑客。
解决方案是使用jQuery TokenInput的补丁,它允许根据函数调用的结果设置URL参数。
https://github.com/loopj/jquery-tokeninput/pull/77
应用补丁并使用以下代码动态更改查询:
function cityURL() {
return 'city.dhtml?c=' + $('#country').val();
}
$('#city').tokenInput( cityURL, { /* ... */ });
并在jquery.tokeninput.js
(第650行附近)禁用缓存:
//var cached_results = cache.get(query);
var cached_results = false;
答案 1 :(得分:1)
整洁的问题,+ 1!是什么阻止你做的事情:
$('#city').tokenInput('city.dhtml?c=' + $('#country').val(), { /* ... */ });
您可能需要将其包含在onChange
事件中,但它应该有效。