2016-11-30 190 views
1

我猜測的問題是在visacard函數中,我設置它,所以如果卡號輸入文本的長度是!=到16(卡號的長度),它會提醒並說無效。但問題是,即使長度等於16還在說無效Javascript:表單驗證?

<body> 
     <script type="text/javascript"> 
      function fun(){ 
       var ddl = document.getElementById("cardtype"); 
       var selectedValue = ddl.options[ddl.selectedIndex].value; 
       if (selectedValue == "cardtype1"){ 
        alert("Please select card type"); 
       } 
      } 

      function visacard(){ 
       var ffl = document.getElementById("cardtype"); 
       var words = parseFloat(document.getElementById("ccn").value); 
       var selectedVisa = ffl.options[ffl.selectedIndex].value; 
       var fin = words.length; 

       if (selectedVisa == "visa" && words.length != 16){ 
        alert("Invalid card number, Try again"); 
       } 
      } 

     </script> 



     <select id="cardtype"> 
      <option value="cardtype1"> - Card Type - </option> 
      <option value="visa">Visa</option> 
      <option value="amex">Amex</option> 
      <option value="mastercard">Mastercard</option> 
     </select> 

     <p>Credit Card Number <input type="text" id="ccn"/></p> 
     <p>CVV <input type="text" id="cvv"/></p> 


     <select name="DOBMonth"> 
    <option> - Month - </option> 
    <option value="January">January</option> 
    <option value="Febuary">Febuary</option> 
    <option value="March">March</option> 
    <option value="April">April</option> 
    <option value="May">May</option> 
    <option value="June">June</option> 
    <option value="July">July</option> 
    <option value="August">August</option> 
    <option value="September">September</option> 
    <option value="October">October</option> 
    <option value="November">November</option> 
    <option value="December">December</option> 
</select> 

     <select name="DOBYear"> 
    <option> - Year - </option> 
    <option value="2017">2017</option> 
    <option value="2018">2018</option> 
    <option value="2019">2019</option> 
    <option value="2020">2020</option> 
    <option value="2021">2021</option> 
    <option value="2022">2022</option> 
    <option value="2023">2023</option> 



     </select> 


     <input type="button" onClick="fun();visacard();" value="click here"> 

    </body> 
</html> 
+0

我認爲你正在尋找HTML5表單驗證,它使用正則表達式來處理粒狀情況。 –

+0

根據[維基百科](https://en.wikipedia.org/wiki/Payment_card_number)信用卡號碼可以長達19位數字,對於Visa,他們可以是13,16或19.我建議您搜索「 javascript驗證信用卡號碼「,並查看一些使用的可靠方法,而不是使用長度。 –

+0

您是否有理由自己接受信用卡信息?你有銀行的商戶賬戶來處理你收到的卡嗎?可以爲您節省大量的工作,以便與支付網關進行註冊並重新接入。讓他們處理安全和處理。只要給他們你的模板要求。 –

回答

1

這是因爲其中有一個類型的floatwordslength是不確定的。

例子:

console.log(parseFloat(1111).length); //undefined 

可以使用的toString()將數字轉換成字符串。

if (selectedVisa === "visa" && words.toString().length !== 16){ 

兩個不相關的注意事項:

  • 不要強迫用戶選擇的Visa/MasterCard。您可以根據BIN的第一位數字(4 = Visa,5 = MasterCard)自行決定。

  • 不要使用非嚴格的比較像==!=,使用===!==代替。

+0

'==='和'!=='有它們的位置,'=='和'!=' –

+0

@JaromandaX不在此代碼中。對於初學者來說,他們幾乎總是意味着你不明白你的代碼是幹什麼的。更糟的是,如果你不知道你的代碼是做什麼的,你不會知道諸如'(「0」== null)'或'(「0.00」== false)'的結果,這會導致錯誤很難追查。 – K48

+0

'「0」== null ===''0「=== null' - 那你的意思是? –