实践

操作 className

实现点击标签切换背景,使用了 toggleClass()this

<ul>
  <li class="item">
    <p>
      啤酒
      <span>¥ 6</span>
    </p>
  </li>
  <li class="item">
    <p>
      可乐
      <span>¥ 6</span>
    </p>
  </li>
  <li class="item">
    <p>
      枸杞
      <span>¥ 20</span>
    </p>
  </li>
  <li class="item">
    <p>
      红枣
      <span>¥ 18</span>
    </p>
  </li>
  <li class="item">
    <p>
      雪碧
      <span>¥ 3</span>
    </p>
  </li>
  <li class="item">
    <p>
      奶茶
      <span>¥ 12</span>
    </p>
  </li>
</ul>
<button id="buy">Buy</button>
* {
  margin: 0;
  padding: 0;
  list-style: none;
}
li {
  width: 300px;
  background: #ededed;
  color: black;
  border-radius: 10px;
  margin-bottom: 15px;
}
p {
  font-size: 18px;
  padding: 10px 10px;
}
p > span {
  float: right;
}
#buy {
  margin: 10px;
  padding: 10px;
  border: 2px solid rgb(30, 186, 248);
  border-radius: 5px;
  background-color: #fff;
  color: rgb(77, 214, 248);
  cursor: pointer;
  outline: none;
}
.active {
  color: #fff;
  background: rgb(30, 186, 248);
}
$('.item').click(function() {
  // this 就是原生的 DOM, 而 $()中可以放入原生 DOM
  // 但是不能直接使用 this.toggle, 因为原生的 DOM 没有此方法。
  $(this).toggleClass('active')
  // if ($(this).hasClass('active')) {
  //   $(this).removeClass('active')
  // } else {
  //   $(this).addClass('active')
  // }
})

表单校验

使用了常用方法 blur()submit(),即 JS 中的 onblur()onsubmit()。需要注意的是,submit 方法只能给表单或 submit 类型的按钮使用。onsubmit 是标签的属性,所以它只能写在标签上来调用函数,而且建议写在 form 标签上(如 onsubmit="return check()")。submit 按钮可以直接绑定单击事件,可以不用绑定 submit 或 onsubmit。表单的强大之处在于,当函数的返回值为 true 时,它才会提交。

  • 示例1

    <form action="jquerydemo09.html" name="form" id="form">
      <span>用户名</span>: <input id="uname" name="uname" type="text" autocomplete="off"><br>
      <span>密码</span>: <input id="upwd" name="upwd" type="password" autocomplete="off"><br>
      <span>确认密码</span>: <input id="urpwd" name="urpwd" type="password" autocomplete="off"><br>
      <span>年龄</span>: <input id="uage" name="uage" type="text" autocomplete="off"><br>
      <span>电话</span>: <input id="utel" name="utel" type="text" autocomplete="off"><br>
      <span>姓名</span>: <input id="utname" name="utname" type="text" autocomplete="off"><br>
      <span>邮箱</span>: <input id="uemail" name="uemail" type="text" autocomplete="off"><br>
    
      <button id="btn" type="button">提交</button>
      <!-- <button id="btn" type="submit">提交</button> -->
    </form>
    
    /* 以下样式是为了使文字两端对齐 */
    span{
      display: inline-block;
      width: 70px;
      /* height: 50px; */
      text-align: justify;
      /* 必须要加上下面这句, 不然会以低端对齐 */
      vertical-align: top;
      overflow: hidden;
    }
    span::after{
      content: " ";
      display: inline-block;
      width: 100%;
      height: 0;
    }
    
    // 验证年龄
    function checkAge() {
      // 如果此函数写在外面被调用, 则不能使用 $(this).val()
      var $age = $('#uage').val()
      console.log($age)
      if (/^\d{1,2}$/.test($age) && $age >= 18 && $age <= 130) {
        // isNaN(number) 如果是纯数字(不一定是十进制的, 纯数字的字符串也可), 则返回 false
        console.log('年龄正确')
      } else {
        console.log('年龄错误')
        return false
      }
      return true
    }
    // 验证邮箱
    function checkEmail(){
      var $uemail = $('#uemail').val()
      // /^\w+([-\.]\w+)*@[A-z\d]+(\.[A-z\d]{2,6}){1,2}$/
      if(/^\w+([-\.]\w+)*@[A-z\d]{2,70}(\.[A-z\d]{2,6}){1,2}$/.test($uemail)) {
        console.log('邮箱正确')
      } else {
        console.log('邮箱错误')
        return false
      }
      return true
    }
    
    $(function () {
      $('#uage').blur(checkAge)
      $('#uemail').blur(checkEmail)
      $('#btn').click(function () {
        var state = checkAge() && checkEmail()
        if (state) {
          $('#form').submit()
        }
      })
    })
    
  • 示例2

    密码: <input type="text" name="" id="" onclick="test(this)" value="23">
    
    function test(params) {
      console.log($(params).val())
    }