我想用ajax來實作購物商城中對于預設位址的切換,而不需要對界面進行重新加載,但是在操作中遇到了一些問題,主要就是字元串與數字類型資料拼接的時候遇到了bug。
以下為CSS代碼:
{% for item in list %}
<div class="site_con">
<dl>
<dd><a href="#" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" >{{ item.address }} {{ item.detail }} ({{ item.realname }} 收) {{ item.phone }}</a></dd>
<dd>
<div>
{% if item.def_address %}
<input type="checkbox" checked="checked" style="vertical-align:middle;"
onclick="defAddress({{ item.id }})" id="{{ forloop.counter}}"/>
{% else %}
<input type="checkbox" style="vertical-align:middle;"
onclick="defAddress({{ item.id }})" id="{{ forloop.counter }}"/>
{% endif %}
<span style="vertical-align:middle;" >預設位址</span>
<a href="/user/address_edit/?id={{ item.id }}" target="_blank" rel="external nofollow" style="vertical-align:middle;" >編輯</a>
<a href="#" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" style="vertical-align:middle;" onclick="deleteAddress({{ item.id }})">删除</a>
</div>
</dd>
</dl>
</div>
{% endfor %}
JS代碼如下:
function defAddress(currentId) {
$.get('/user/address_default/',{'currentId':currentId},function (data) {
$.each(data.address_list,function (index, item) {
if(item.def_address==1){
$('#'+(index+1)+'').prop('checked',true)
}else {
$('#'+(index+1)+'').prop('checked',false)
}
})
})
}
那麼在JS代碼中,id選擇器是一個字元#和數字變量index以及數字1拼接起來的,在js中,字元串得與數字的拼接不需要将數字轉換成字元串,JS會自動将數字轉換成字元串,但是,不能這樣寫:
$('#'+index+1+'').prop('checked',true)
一定記住,因為拼接出來的為#11,而我們要的是#2,是以要寫成:
$('#'+(index+1)+'').prop('checked',true)
這一點一定要記住,而且要細心!