iT邦幫忙

0

JQUERY 簡易判斷在input鍵入(keyup)文字時是否包含%的符號

  • 分享至 

  • xImage

我預設有四個欄位分別是

<input  type="text"  id="unit1" value="">
<input  type="text"  id="it1"  value="">
<input  type="text"  id="ip1"  value="">
<p  id="resultp1"></p>

單位(id=unit1) 數量(id=it1) 單價(id=ip1) 顯示總金額(id=resultp1)
想要做到判斷如果單位(unit)是輸入"%"這個符號的話 總金額就是數量單價/100
而如果單位是"%"符號的話就是 總金額就是數量
單價

目前我只能抓得到數量跟單價的數值 也可以在總金額顯示的地方正確顯示相乘結果如下列所示

但想請問如果我想加入上面所述的%判斷在下面的程式碼中 需要如何寫呢 謝謝

$(document).ready(function() {

   var totalInput1 = $('#resultp1');

   $('input').keyup(function() { 
    var total1 = 0;
    // 相乘input的值
    $('.count1').each(function () {
    var v1 = $("#it1").val()
    var v2 = $("#ip1").val()

    if (!isNaN(v2)) { // 如果v是有效数字
    total1 = v1*v2;
   }
	else {
		this.value = '';
		}
   });
	  $("#resultp1").html(total1);
   }); });

上面需求是要輸入三個值: 單位,數量,單價 去做計算
另外想問如果我要計算的不只一列 但只需要輸入 數量跟單價
而裡面input(單位unit)裡面是已經預設好的有些是%有些不是%
要如何判斷其單位是%的話 總金額是/100
反之總金額就是直接數量*金額呢 謝謝

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

3
japhenchen
iT邦超人 1 級 ‧ 2021-01-20 12:12:35
最佳解答

..........回錯題意..重寫

看更多先前的回應...收起先前的回應...

輸入時判斷

    $(document)
        .on("keydown", "input[type='text']", function (e) {
            if (e.keyCode === 53) {
                if (e.shiftKey) {
                    // they pressed %
                } else {
                    // they pressed 5
                }
            }
        })

送出資料前判斷

<form onsubmit="checkvalue">
</form>

<script>
function checkvalue(){
    let value = $("form[name='formname'] input[name='whatkey']").val();
   if(value.isDigit()){
       // .... 數字
   }else{
       if(value.match(/\%/)!==null)
       {
           //有%
       }
   }
}
String.prototype.isDigit = function () {
    return /^\d*\.{0,1}\d*$/.test(this.valueOf());
}
</script>
yhn2880 iT邦新手 5 級 ‧ 2021-01-20 12:24:19 檢舉

感謝 另外想請教如果我要計算的不只一列
有些列裡面input(單位unit)裡面是已經預設好的有些是%有些不是%
我如果只需要輸入數量 跟單價 要怎麼判斷其單位是%的話 總金額是/100
反之總金額就是直接數量*金額呢 謝謝

不只一列的話就用class+for,所有會抓%的input都加class='forminput',我隨便定的名字,你自己弄好看一點

let values =$(".forminput");
for(i=0;i<values.length;i++){
    if(values[i].match(/\%/)!==null){
        values[i].replace('%','')*=0.01;  // 100%=1
    }
});

j大已經寫好了。我就不重覆了。
搭配一下j大用的正則。將數值跟單位給區分出來。
這是第一招。
第二招則是將單位用select來表現。
而輸入數值的部份直接數值化就行。

再計算方面,其實我比較少用key相關的應用事件。
而是會用change事件來處理比較好。

畢竟你是要多列數的情況。每按一下就run並不太適合。
建議還是用 change 事件。

當然,key事件可以用來判斷不合法字元使用。如輸入英文時自動拒絕輸入等等防呆的處理。

yhn2880 iT邦新手 5 級 ‧ 2021-01-20 16:20:26 檢舉

好的 以解決! 感謝

我要發表回答

立即登入回答