代码之家  ›  专栏  ›  技术社区  ›  Kyle Underhill

将多个实例的js转换为jquery click函数

  •  0
  • Kyle Underhill  · 技术社区  · 7 年前

    我有一个在javascript中运行一次的函数(通过调用 id )。我尝试将函数转换为jquery,以允许函数在 pwd .

    如何让jquery代码像JS代码一样工作,但在 随钻测井 ?

    $(".pass").on("click", ".typcn-eye", function() {
      var pwd = $(this).closest(".pwd");
    
      function togglePass() {
        $(this).toggleClass("active");
    
        pwd.type == "password" ? (pwd.type = "text") : (pwd.type = "password");
      }
    });
    

    var pwd = document.getElementById('pwd');
    var eye = document.getElementById('eye');
    
    eye.addEventListener('click', togglePass);
    
    function togglePass() {
    
      eye.classList.toggle('active');
    
      (pwd.type == 'password') ? pwd.type = 'text': pwd.type = 'password';
    }
    .box {
      display: flex;
      flex-direction: column;
      align-items: start;
    }
    
    .pass {
      display: flex;
      align-items: center;
      border: 1px solid;
    }
    
    .box input[type="text"],
    .box input[type="password"] {
      display: block;
      margin: 20px auto;
      background: #ececec;
      border: 0;
      border-radius: 5px;
      padding: 14px 10px;
      width: 220px;
      outline: none;
      color: #565f79;
    }
    
    .typcn {
      color: #3b476b;
      font-size: 22px;
      cursor: pointer;
    }
    
    .typcn.active {
      color: #7f60eb;
    }
    <link href="https://cdnjs.cloudflare.com/ajax/libs/typicons/2.0.9/typicons.min.css" rel="stylesheet"/>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <form class="box">
      <div class="pass">
        <input class="pwd" type="password" name="password" placeholder="Passsword" id="pwd" autocomplete="off">
        <i class="typcn typcn-eye" id="eye"></i>
      </div>
      <div class="pass">
        <input class="pwd" type="password" name="password" placeholder="Passsword" id="pwd2" autocomplete="off">
        <i class="typcn typcn-eye" id="eye2"></i>
      </div>
    </form>
    1 回复  |  直到 7 年前
        1
  •  1
  •   Hakan Kose    7 年前

    在您的click事件中的jquery版本中,您有togglePass()函数,但是您永远不会触发它。因为你在你的另一个版本。

    // For triggering you function
    $(".pass").on("click", ".typcn-eye", togglePass);
    
    // Function outside your click event
    function togglePass() {
        // Toggle active class on every click
        $(this).toggleClass("active");
        // Get the type of the prev element 
        let type = $(this).prev().attr("type"),
            changeTo = type === "password" ? "text" : "password";
    
        // Change type attr of that element
        $(this).prev().attr("type", changeTo);
    }
    .box {
        display: flex;
        flex-direction: column;
        align-items: start;
    }
    
    .pass {
        display: flex;
        align-items: center;
        border: 1px solid;
    }
    
    .box input[type="text"],
    .box input[type="password"] {
        display: block;
        margin: 20px auto;
        background: #ececec;
        border: 0;
        border-radius: 5px;
        padding: 14px 10px;
        width: 220px;
        outline: none;
        color: #565f79;
    }
    
    .typcn {
        color: #3b476b;
        font-size: 22px;
        cursor: pointer;
    }
    
    .typcn.active {
        color: #7f60eb;
    }
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <link href="https://cdnjs.cloudflare.com/ajax/libs/typicons/2.0.9/typicons.min.css" rel="stylesheet" />
    <form class="box">
        <div class="pass">
            <input class="pwd" type="password" name="password" placeholder="Passsword" id="pwd" autocomplete="off">
            <i class="typcn typcn-eye" id="eye"></i>
        </div>
        <div class="pass">
            <input class="pwd" type="password" name="password" placeholder="Passsword" id="pwd2" autocomplete="off">
            <i class="typcn typcn-eye" id="eye2"></i>
        </div>
    </form>