为什么这个jquery不起作用

Why this jquery doesnt works?

本文关键字:不起作用 jquery 为什么      更新时间:2023-10-19

检查这个小提琴http://jsfiddle.net/KaDy8/7/。这是我的jquery代码

jQuery(document).ready(function(){
$('input[name="cardnumber"]').on('keyup',function(){
   var cc_num = $('input[name="cardnumber"]').val();
   if(cc_num.charAt(0)=='4'){
    $('#visa').addClass("active");
    $('#mastercard ').removeClass("active");
   }else if(cc_num.charAt(0)=='5'){
    $('#mastercard').addClass("active");
    $('#visa').removeClass("active");
   }
});
});

当我输入4时,活动类应添加到ul元素签证中,当我输入5时,活动类别应添加到ul-element万事达卡中。当我在字段中输入5时,它正在工作,卡正在更改,也就是说,它将类添加到ul元素主卡,但从那里开始,如果我输入4,它不会将类添加回ul元素visa。可能是什么问题?

问题是

var cc_num = $('input[name="cardnumber"]').val();

将始终获取具有该名称的第一个input元素的值,而不是触发事件的元素的值。

输入5后,input就会消失(您注意到5是如何消失的吗?)。现在输入的任何值都将输入到#mastercard内部的第二个input元素中。第一个input元素(属于#visa的元素)的值仍然是5并且没有改变。这就是为什么条件cc_num.charAt(0)=='4'从未被满足。

您可以通过获取当前input元素的值来解决眼前的问题,该元素触发了keyup事件:

var cc_num = $(this).val();

(演示)

然而,这不是令人满意的解决方案,因为现在第一个input元素(在#visa中)被再次示出并且仍然包含值5。这是一个非常令人困惑的行为:用户刚输入4,就变成了5

如果我是你,我将只有一组表单元素(即只有一个input字段),并且仅通过CSS处理所有样式更改。示例:http://jsfiddle.net/KaDy8/16/.

我认为这样做是不对的。你可以通过CSS的独特形式使它变得简单。看看这个演示,它是你的演示的修改形式。你可以通过更改主类来轻松地完成这件事。你可以更改演示的整个部分

现在你的Html看起来像

<section id='cards' class="credit-card visa gr-cards">
        <div class="visa-logo">visa</div>
        <div class="mastercard-logo"><div></div><div></div></div>
        <form>
            <h2>Payment Details</h2>
            <ul class="inputs">
                <li>
                    <label>Card Number</label>
                    <input type="text" name="cardnumber" pattern="[0-9]{13,16}" class="full gr-input" required />
                </li>
          <li>
            <label>Name on card</label>
            <input type="text" name="card_name" size="20" class="month gr-input" required />
                <li class="expire last">
                    <label>Expiration</label>
                <div class="dropdown">
      <select name="one" class="dropdown-select month gr-input">
        <option value="">Month</option>
        <option value="1">Jan</option>
        <option value="2">Feb</option>
        <option value="3">Mar</option>
     <option value="4">Apr</option>
        <option value="5">May</option>
        <option value="6">Jun</option>
     <option value="7">Jul</option>
     <option value="8">Aug</option>
     <option value="9">Sep</option>
     <option value="10">Oct</option>
     <option value="11">Nov</option>
     <option value="12">Dec</option>
      </select>
    </div>          
            <div class="dropdown">
      <select name="one" class="dropdown-select year gr-input">
        <option value="">Year</option>
           <option value="2013">2013</option>
        <option value="2014">2014</option>
        <option value="2015">2015</option>
     <option value="2016">2016</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>
     <option value="2024">2024</option>
      </select>
    </div>
                    <div class="clearfix"></div>
                </li>
                <li class="cvc-code last">
                    <label>CVV Code</label>
                    <input type="text" name="cvc_code" value="174" size="10" class="gr-input" required />
                </li>
              <input type="post" name="submit" value="Pay Now" class="fsSubmitButton"/>
                <div class="clearfix"></div>
            </ul>
        </form>
        <div class="visa-watermark">visa</div>
        <div class="mastercard-watermark"><div></div><div></div></div>
    </section>

JS如下

$(document).ready(function(){
    $('input[name="cardnumber"]').on('keyup',function(){
       var cc_num = $(this).val();
       if(cc_num.charAt(0)=='4'){
          $('#cards.credit-card').removeClass("visa mastercard").addClass("visa");
       } else if(cc_num.charAt(0)=='5'){
          $('#cards.credit-card').removeClass("visa mastercard").addClass("mastercard");
       }
    });
});

有关新css,请参阅演示

现在你可以重复使用相同的签证表格;万事达卡。享受

请查看http://jsfiddle.net/KaDy8/11/

jQuery(document).ready(function(){
$('input[name="cardnumber"]').on('keyup',function(){
   var cc_num = $(this).val();
   if(cc_num.charAt(0)=='4'){
    $('#visa').addClass("active");
    $('#mastercard ').removeClass("active");
   }else if(cc_num.charAt(0)=='5'){
    $('#visa').removeClass("active");
    $('#mastercard').addClass("active");
   }
});
});

下面是演示:-jsfiddle.net/KaDy8/12/

这是你的问题的演示

现在了解你的情况出现了什么问题首先,您应该编写$(this).val();以获取当前输入,这样您将始终获得当前输入。

您对bot输入字段(卡号)使用相同的名称。为输入提供唯一名称并进行检查。