`
robinqu
  • 浏览: 90253 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

[更新20100922]jQuery Location Select 插件- 地址联动、地理检测

阅读更多

 

最新版本的LocationSelect已经将其与jQuery分离,但做了一个jQuery的适配器,可以和jQuery一起使用。而且现在可以支持任意级别联动⋯⋯

介绍

用户的地址选择往往是网络应用中不可缺少的一部分,可是遇到了以下问题:

  • 地址数据难以收集
  • 用户选择烦琐,需要手动查找冗长的下拉菜单
  • 难以维护地理数据以及重用组件

LocationSelect插件具有以下特点,有效的解决了以上三个问题:

  • 基于广泛使用的jQuery插件库,轻易实现组件重用。你也可以选择使用不使用任何脚本库的版本。
  • 地理数据整理来自国家公布数据
  • 自动判断用户地理位置并进行最大努力的自动选择
  • 独立的json数据源,可以方便的进行维护

演示

一个在线演示可以在http://pagetalks.com/share/LocationSelect找到。
该演示实现了一个自动探测用户地理位置并自行选择的标准案例。

兼容性

我测试过如下浏览器:Safari5、Safari Mobile(iOS 4.0.1)、Firefox3、IE6、IE7、IE8、Opera10

 

下载

代码寄存在GitHub : http://github.com/RobinQu/LocationSelect-Plugin

安装

  1. (可选)引入jQuery脚本库,目前脚本仅在1.4.2的jQuery中进行过调试,推荐大家使用。同时,还可以使用Google的CDN进行加速:
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"></script>
  2. 由于需要用到JSON的解析器,脚本默认会调用JSON.parse方法来解析。如果你的项目里没有定义JSON.parse方法,请引用JSON.org的脚本。
    <script src="http://www.JSON.org/json2.js" type="text/javascript"></script>
  3. 现在已经不用手动引入第三方脚本了。引入地理查询引擎(可选)- 本脚本是使用Google Map API V2以及MAXMIND的Javascript API进行联合查询实现确定用户地理信息的。随着Google Map的反向地址解析更为强大后,脚本会考虑减少外部脚本的依赖性。目前如果您需要使用自动检测功能,您必须引入这两个脚本
    <script src="http://j.maxmind.com/app/geoip.js" type="text/javascript"></script>
    	<script src="http://maps.google.com/maps?file=api&v=2&key=XXXXXXX_YOUR_API_KEY_XXXX&sensor=false" type="text/javascript">
  4. 引入LocationSelect的脚本文件 –
    <script type="text/javascript" src="LocationSelect.js"></script>
  5. 在DOM Ready事件后调用,通常您应该传递响应数目的Select对象:
    	$(function() {
    	$("select").LocationSelect({
            name : "areas",
    	labels :["请选择一个省份或直辖市", "请选择一个城市", "请选择一个区"]
    	});

    还可以选择使用非jQuery的初始方法:

    var ls = new com.elfvision.kit.LocationSelect({
    				labels :["请选择一个省份或直辖市", "请选择一个城市", "请选择一个区"],
    				elements : $("select").get()
    			});

参数

name (String) 必须
默认: “areas.json” – json数据文件的地址,相对于当前页面
labels (Array) 必须
每个菜单的默认标签名,例如,["请选择一个省份或直辖市", "请选择一个城市", "请选择一个区"]。注意该元素的数量决定联动菜单中选项的数目,所以一定要为每个元素制定标签。
detectGeoLocation : (Boolean)
默认: true – 是否自动检测用户地址并进行选择
listHelper : (ListHelper)
默认: com.elfvision.kit.LocationSelect.ListHelper – 列表的工具类,该插件会使用次对象中的方法去加载对象、查询列表项目等操作。传入自定义的该对象可以进行该插件的深度定制。详细内容见后文。
detector : (Function)
默认: com.elfvision.kit.LocationSelect.GeoDetect – 自动探测方法。默认情况下会利用用户IP查询地理位置。

如何定制

有很多同学想要进行定制操作,从1.1版本开始,就已经把大部分重要的算法给独立到单独的接口里面,方便大家定制。首先讲一下这个插件的工作原理。

Sequence Diagram

首先,插件会尝试使用ListHelper的fetch方法去取回所有要用的数据文件。默认情况下会访问ListHelper.dataUrl的地址,如果你不作任何配置,这个地址指向的是插件自带的areas_1.0.json。

当fetch方法返回之后,会执行一个回调函数。这个回调函数里回进行列表的初始划操作。

当列表都初始化完成,控件就已经可用了。如果自动探测的选项依然为true,就会继续接下来的探测逻辑。插件内置了根据IP判断地理位置的探测算法。

该算法是调用的Maxmind GEOCITY的API获得用户经纬度,然后使用Google Map的Geocoder WebService根据经纬度解析用户地理信息。然后利用返回结果去对列表进行“选择”。

可以看到还有个YQL的参与,这是Google Map V3的WebService已经不支持JSONP了,对跨域请求来说是噩梦。通过YQL作为一个Proxy返回的JSONP。

下面开始介绍如何进行深度定制。首先上一张Class Diagram。

Class Diagram

基本来说,通过定制所传入的ListHelper对象detector函数来控制该插件的功能。

Interface ListHelper

ListHelper是一个列表的工具接口。默认的ListHelper采用了Singleton的模式,但你可以选择不这么做。只要保证提供fetch和find方法即可。这两个方法必须实现如下操作:

  • fetch方法接受一个回调函数,在把所需要的JSON基本数据取得了之后就必须会被执行。
  • find方法根据传来level和id两个参数对fetch方法获得的数据进行查找进行记录的查找,必须返回一个装有记录的数组。
纪录的数据结构
该插件对数据项的结构有所规定。一个项目如下:

 

{
"id" : "112",
"text" : "Foobar"
}

注意该项目中所有的属性均为字符串。

level
evel的意义是标识进行find请求的是第几个List。该插件中,前一个List的选项进行改变后会出发下一个List更新其内容,那么查找的find方法必须知道前一个List的level。find方法被插件调用时会自动传入level的值,该值从0开始计数。在插件默认的ListHelper里面,会调用一个find(-1)的请求,这是在请求第一个List的默认数据。插件默认状况就是通过这个请求去请求“省份”的数据项目的。
id
id值即前一个List中被选项目的id值。

你可以用fetch方法从后台取得数据(不管是啥数据,只要复合数据项目的结构规定)之后,根据这些数据实现find方法。

你可以传入的另外一个元素是detector函数。这个是执行自动选择的函数。默认的detector函数执行了地理位置的探测,但你可以实现你自得探测算法。只要最终使用LocationSelect.select()方法选择一组数据项。例如:

that.select(["湖北省",“武汉市”]);

这些值始终会根据List的传入顺序进行比对。如果List的数目大于给出的数组元素的数量,将不会对那些没有对应数值的List进行选择;如果传入的数值数组元素个数大于List个数,剩下的数组元素将会被抛弃。

通过传入自定义的ListHelper和detector,你可以完全自定义出类似于多级商品门类选择之类的联动菜单应用。也就不局限于选择一下地址而已了⋯⋯

更新日志

1.0.0
LocationSelect的第一个发行版本
1.1.0
LocationSelect的重写版本,与jQuery独立,改善性能。

 

分享到:
评论
14 楼 robinqu 2010-09-27  
又改了一些小错误~
13 楼 robinqu 2010-09-22  
kimm 写道
这个功能不错,就是应用有点局限,内网就不好用了。



现在可以自定义查询的算法和数据源。

下一个版本考虑使用HTML5的Geolocation API,对于较新的浏览器应该会准确很多⋯⋯
12 楼 robinqu 2010-09-22  
更新了⋯⋯把代码重写了一次⋯⋯大家可以实现任何种类的联动,以及任意种类的数据源
11 楼 kimm 2010-04-22  
这个功能不错,就是应用有点局限,内网就不好用了。
10 楼 zhouzhao21 2010-04-20  
楼主在 google code 上建个项目吧. 好实时跟进
9 楼 robinqu 2010-04-04  
kjj 写道
早一天,我昨天就不费劲做这个了!!!!!
给你投了良好!!!

顺便问一下,能不能裁剪,比如我需要选择到市就可以了,不需要地区!!


目前不能设置,但是可以手动将那个选择地区的input隐藏?

再过几天会修改一次代码吧⋯⋯
8 楼 robinqu 2010-04-04  
lobbychmd 写道
还以为有地图。。。

加地图是非常简单的~
7 楼 ftmouse 2010-03-25  
google走了,过两天api都访问不了了
6 楼 coofucoo 2010-03-25  
非常不错!
非常期待楼主的下一个版本发布。。。
5 楼 kjj 2010-03-24  
早一天,我昨天就不费劲做这个了!!!!!
给你投了良好!!!

顺便问一下,能不能裁剪,比如我需要选择到市就可以了,不需要地区!!
4 楼 lobbychmd 2010-03-24  
还以为有地图。。。
3 楼 ilovewei 2010-03-24  
我居然是前三
2 楼 bluemusic 2010-03-24  
IE8测试下来没什么问题,等会下了看看代码
1 楼 robinqu 2010-03-23  
竟然没有回复⋯⋯

相关推荐

    JQuery中国省市区街道三级、四级联动下拉菜单插件

    封装JQuery插件,中国省市区三级联动下拉菜单,省市区街道四级联动下拉菜单插件,三级插件取的值为地区编号或地区名,四级插件默认为地区编号,修改jquery.citys.js中的valueType为“name”,街道单独在代码中修改...

    jQuery地区选择插件

    $('#province').locationSelect({ data: 'regions.json', // 数据源 defaultSelected: [1, 1, 1] // 默认选中的省市区ID }); }); ``` 4. 自定义配置:根据需要调整配置参数,如改变默认值、添加搜索功能等。 四...

    jQuery世界城市三级联动下拉选择代码

    `location_chs.js`和`area_chs.js`是包含地理位置数据的JavaScript文件,它们可能存储了世界各国、各省份和城市的名称和ID,这些数据被jQuery用来填充和更新下拉列表。`location_chs.js`可能包含了主要的地理位置...

    jquery+ajax+json省市区三级联动

    在网页开发中,实现省市区三级联动是一种常见的需求,它能帮助用户快速选择地理位置。...开发者可以通过解压文件"RobinQu-LocationSelect-Plugin-1449003"来查看具体的实现细节,进一步学习和扩展这个功能。

    JQuery三级无刷新联动_select_For C#.

    本文将深入探讨如何使用jQuery实现三级无刷新联动的下拉选择框(select)功能,特别针对C# .NET开发环境。 首先,我们要理解什么是“三级联动”。在Web开发中,联动通常指的是当用户在一个选择项中做出选择时,其他...

    JQ+XML实现洲、国家、省、市三、四级联动

    这种效果通常应用于地址选择器或地区筛选功能,以便用户能方便地选择他们所在的地理位置。以下是实现这一功能的关键知识点和步骤。 ### 1. jQuery简介 jQuery是一个高效、简洁的JavaScript库,它简化了HTML文档遍历...

    JQ 世界地区三级联动

    这个插件是基于jQuery(简称JQ)设计的,用于实现国家、省份和城市的三级联动选择效果。下面将详细阐述这个插件的工作原理、涉及的技术和使用方法。 首先,jQuery是一款广泛使用的JavaScript库,它简化了DOM操作、...

    jQuery 省市联动

    【标题】"jQuery 省市联动"是一个常见的前端开发技术,主要应用于网页中的下拉菜单选择,使得用户在选择省份时,相应的城市下拉菜单能够动态更新,提供与所选省份相关的城市列表。这种功能在注册表单、地址填写等...

    jquery特效

    1. **插件定义**:`$.LocationSelect`定义了一个jQuery插件,其默认配置包括数据源和是否自动检测位置。 2. **构建组件**:`build`方法负责构建省市区选择组件,包括在页面上插入三个下拉框并初始化状态。 3. **...

    收货地址 四级联动JS

    在IT行业中,尤其是在前端开发领域,"收货地址四级联动JS"是一种常见的功能设计,用于提升用户在填写收货信息时的便捷性和准确性。这个功能通常涉及到四个层级的数据:国家、省份、城市和区县(或者街道),通过...

    仿京东配送至联动城市选择器插件js代码

    这个插件通常用于电商网站,帮助用户根据他们的地理位置选择合适的配送城市,同时联动显示与之相关的下级行政区域,如区县等,提升购物体验。 首先,我们要了解JavaScript(JS)作为客户端脚本语言,它是实现网页...

    jquery制作京东物流配送三级关联城市选择

    本示例探讨的是如何使用jQuery库来实现京东物流配送中的三级关联城市选择功能,这是一个常见的前端表单元素,常用于需要精确指定收货地址的场景。 首先,jQuery是一个强大的JavaScript库,它简化了DOM操作、事件...

    用js写的省市区三级联动

    在网页开发中,省市区三级联动是一种常见的交互功能,它允许用户通过选择省份来自动更新市、区的下拉选项,提高用户体验。本项目利用JavaScript技术实现这一功能,结合HTML、CSS以及jQuery库,提供了完整的解决方案...

    Select2实现的省市区三级联动

    在这个场景中,我们使用了Select2插件来实现这一效果。 Select2是一款强大的jQuery插件,它对原生HTML选择器进行了增强,提供了诸如搜索、多选、无限滚动等多种高级功能。对于省市区三级联动的需求,Select2的灵活...

    三级省市联动

    在IT领域,"三级省市联动"是一种常见的前端交互设计,主要应用于网页表单中的地址选择。这个设计使得用户在选择省份时,相应的市和区/县会根据所选的省份动态更新,提供更加便捷和准确的输入体验。下面将详细阐述...

    js实现简单的联动菜单效果

    在本文中,我们将讨论如何使用JavaScript来实现一个简单的Select联动菜单效果,涉及的主要知识点包括如何使用JavaScript遍历、读取和设置页面元素,以及如何通过事件监听器来响应用户的选择,从而动态更新其他元素的...

    二级,三级下拉列表菜单

    在网页设计中,二级和三级下拉列表菜单是一种常见的交互元素,主要用于呈现层次结构的数据,如选择地理位置、分类导航等。这种菜单设计可以节省页面空间,同时提供清晰的导航路径,让用户能快速找到所需信息。在...

    Springboot中ajax实现动态绑定省市区

    在Spring Boot应用中,Ajax(Asynchronous JavaScript and XML)技术常用于实现页面的异步更新,提高用户体验。这里我们将探讨如何在Spring Boot中利用Ajax来动态绑定省市区数据,特别是从高德地图API获取这些数据。...

    ExtAspNet v2.2.1 (2009-4-1) 值得一看

    -增加示例(data/tree_select_run.aspx),如何选中当前节点的所有子节点(feedback:wjl_wjl520)。 +TreeNode的属性NodeId被重命名为NodeID,这是ExtAspNet中的一个命名约定。 -同时更名的还有GridColumn的...

    ExtAspNet_v2.3.2_dll

    -增加示例(data/tree_select_run.aspx),如何选中当前节点的所有子节点(feedback:wjl_wjl520)。 +TreeNode的属性NodeId被重命名为NodeID,这是ExtAspNet中的一个命名约定。 -同时更名的还有GridColumn的...

Global site tag (gtag.js) - Google Analytics