关于电商网站中送货地址选择功能实现的思考

在电商网站中,需要实现送货地址选择的功能,这里提供两种比较传统的思路。

方法一:使用Ajax+CSS+JQuery提交

HTML文件

<br />
<h2 id="address_select">选择收货地址</h2>
<hr />

<table class="table">
  <thead>
    <tr>
      <th>ID</th>
      <th>姓名</th>
      <th>电话</th>
      <th>省</th>
      <th>城市</th>
      <th>区县</th>
      <th>街道</th>
      <th colspan="3"></th>
    </tr>
  </thead>

  <tbody>
      <tr class="address">
        <td>1</td>
        <td>yongqiang</td>
        <td>18910008000</td>
        <td>内蒙古</td>
        <td>乌兰察布</td>
        <td>集宁</td>
        <td>某小区 15号楼 一单元 203</td>
        <td><a href="/addresses/1">Show</a></td>
        <td><a href="/addresses/1/edit">Edit</a></td>
        <td><a data-confirm="Are you sure?" rel="nofollow" data-method="delete" href="/addresses/1">Destroy</a></td>
      </tr>
      <tr class="address">
        <td>2</td>
        <td>lily</td>
        <td>18910002000</td>
        <td>河北</td>
        <td>石家庄</td>
        <td>裕华区</td>
        <td>裕祥街22号</td>
        <td><a href="/addresses/2">Show</a></td>
        <td><a href="/addresses/2/edit">Edit</a></td>
        <td><a data-confirm="Are you sure?" rel="nofollow" data-method="delete" href="/addresses/2">Destroy</a></td>
      </tr>
  </tbody>
</table>

CSS文件。样式变换依赖class的增加与删除

.selected {
	color: white;
    background-color: skyblue;
}

** js文件。获取选择的ID,样式变换 **

// check.js

$(function() {
	// address_id gets the id of address which is selected by user.
	var address_id;

	// get address_id
	$(".address").click(function(event) {

		//console.log($(this).children('td').eq(0).text())

		$(".address").removeClass('selected')
		$(this).addClass('selected');

		address_id = $(this).children('td').eq(0).text();

	});


	// for debug
	$("#address_select").click(function(event) {
		/* Act on the event */
		alert(address_id);
	});


});

方法二、使用html中select

实现地址的选择比较简单的做法是直接使用html自带的select功能。 这样不会引入js处理的一些不必要的问题。

两种效果对比

方法一实现起来较为复杂,展示效果及体验相对好,定制化程度高,引入了不确定性的js问题。 这里实现上还有一些问题,切换controller后,再点击地址,无效没有反应。京东应该是这种方式。

方法二实现容易,基本没有依赖,html原生自带。

我的选择:能满足功能的情况下,还是使用html原生的select方法。