我猜的问题是在Visacard功能中,我对其进行了设置,以便如果卡号文本输入长度为!=到16(卡号的长度),它将发出警告并说无效。但是问题是,即使长度等于16,它仍然表示无效

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

最佳答案

这是因为类型为lengthwordsfloat未定义。

例:

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


您可以使用toString()将数字转换为字符串。

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


两个不相关的注释:


不要强迫用户选择Visa / MasterCard。您可以根据BIN的第一位自己决定(4 = Visa,5 = MasterCard)。
不要使用==!=这样的非严格比较,而应使用===!==

关于javascript - Javascript:表单验证?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40880022/

10-09 19:00