1. 程式人生 > >多支付方式選擇

多支付方式選擇

由於業務需要,原單一支付方式現存在多種支付方式的可能性,故在原有基礎上進行擴充,可自由增減付款方式(最少一種,最多三種),如下圖:

151443_qncV_1995422.png

151418_BW6z_1995422.png

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;
}