多支付方式選擇
阿新 • • 發佈:2018-11-26
由於業務需要,原單一支付方式現存在多種支付方式的可能性,故在原有基礎上進行擴充,可自由增減付款方式(最少一種,最多三種),如下圖:
html程式碼部分:
<table>
<tr>
<th style="width: 100px;">售價:</th>
<td><input type="text" value="3000.00" id="txtAmount"/></td>
</tr>
<tr>
<th style ="width: 100px;">付款方式:</th>
<td>
<div id="divPayType" class="divPayType">
<select name="ddlPayType" id="ddlPayType" >
<option value="32">現金</option>
<option value="31">銀行卡</option>
<option value="22">微信</option >
<option value="21">支付寶</option>
</select>
<input type="text" id="txtPayAmount" class="inputPay" onfocus="Calculate(this)" onchange="CalculateChange(this)" onkeyup="onlyNumber(this)" onblur="onlyNumber(this)"/>
<input type="button" id="btnAdd" value="+" class="btnAddReduce" onclick="Add()"/>
<input type="button" id="btnReduce" value="-" class="btnAddReduce" onclick="Reduce()"/>
</div>
<div id="divPayTypelist">
</div>
</td>
</tr>
<tr>
<td colspan="2" style="text-align: center">
<input type="submit" value="確認" onclick="return checkForm();" id="btnSubmit" class="btn">
<input type="submit" value="取消" id="btnCancel" class="btn">
</td>
</tr>
</table>
Js程式碼部分:
$(function() {
$("#txtAmount").change(function () {
$("#txtPayAmount").val($(this).val());//預設第一個付款方式
if ($("#divPayTypelist .divPayType").length > 0) {
$("#divPayTypelist .divPayType").each(function() {
$(this).val(''); //清空已新增的新付款方式
});
}
});
});
//新增支付方式
function Add() {
if ($("#divPayTypelist .divPayType").length >= 2) {
alert('最多支援三種支付方式!');
return;
}
var html = '<div class="divPayType"><select name="selectPay" class="selectPay">' + $("#ddlPayType").html() + '</select><input type="text" class="inputPay" onfocus="Calculate(this)" onchange="CalculateChange(this)" onkeyup="onlyNumber(this)" onblur="onlyNumber(this)"/></div>';
$("#divPayTypelist").append($(html));
}
//減少支付方式
function Reduce() {
if ($("#divPayTypelist .divPayType").length == 0) {
return;
}
var pay = $("#divPayTypelist .divPayType:eq(" + ($("#divPayTypelist .divPayType").length - 1) + ")").find('.inputPay').val(); //獲取最後一種付款方式中文字框的金額
if (pay != '') {
var sAmount = parseFloat($("#txtPayAmount").val()) + parseFloat(pay);
if (sAmount > parseFloat($("#txtAmount").val())) {
$("#txtPayAmount").val($("#txtAmount").val());
} else {
$("#txtPayAmount").val(sAmount); //回填預設第一種付款方式中文字框的金額
}
}
$("#divPayTypelist .divPayType:eq(" + ($("#divPayTypelist .divPayType").length - 1) + ")").remove(); //刪除最後一張付款方式
}
//文字框獲得焦點時,重新計算金額
function Calculate(obj) {
var sum = 0;
$(".inputPay").not(obj).each(function() {
if ($(this).val() != '') {
sum += parseFloat($(this).val());
}
});
$(obj).val((parseFloat($("#txtAmount").val()) - sum).toFixed(2));
}
//文字框的值改變時,重新計算金額
function CalculateChange(obj) {
var sum = 0;
$(".inputPay").each(function () {
if ($(this).val() != '') {
sum += parseFloat($(this).val());
}
});
if (sum > parseFloat($("#txtAmount").val())) {
Calculate(obj);
}
}
//文字框只能輸入數字和浮點數
function onlyNumber(obj) {
//得到第一個字元是否為負號
var t = obj.value.charAt(0);
//先把非數字的都替換掉,除了數字和.
obj.value = obj.value.replace(/[^\d\.]/g, '');
//必須保證第一個為數字而不是.
obj.value = obj.value.replace(/^\./g, '');
//保證只有出現一個.而沒有多個.
obj.value = obj.value.replace(/\.{2,}/g, '.');
//保證.只出現一次,而不能出現兩次以上
obj.value = obj.value.replace('.', '$#$').replace(/\./g, '').replace('$#$', '.');
//如果第一位是負號,則允許新增
if (t == '-') {
obj.value = obj.value.replace('-', '');//'-' + obj.value;
}
}
//提交
function checkForm() {
var str = '';
var sum = parseFloat("0");
$(".divPayType").each(function () {
if (str != '') {
str += ';';
}
str += $(this).find("select").val() + '|' + $(this).find("input").val();
sum += parseFloat($(this).find("input").val() == '' ? "0" : $(this).find("input").val());
});
if (sum != parseFloat($("#txtAmount").val())) {
alert('付款總金額與售價不相等!');
return false;
}
return true;
}