jquery input click取消默認事件


最近實現一個功能,用多選框的選中,實現啟用和禁用功能。

1、實現的過程中發現一個問題:啟用和禁用之前有條件判斷,如果不滿足條件則取消事件,但是發現只要點擊多選框其選中狀態都會發生變化。

想到的是input點擊后有瀏覽器默認的事件,首先想到的辦法是在點擊事件里面給checkbox的狀態在改成checked。

<!DOCTYPE html>
<html>
<head>
<script src="/jquery/jquery-1.11.1.min.js">
</script>
<script>
$(document).ready(function(){
  $("#ckb").click(function(){
    if(true){
       //條件不滿足,還原多選框的選中狀態
       $(this).attr("checked",'true');
    }
    
  });
});
</script>
</head>
<body>
<input type="checkbox" id="ckb" checked/>啟用
</body>
</html>

經過測試發現,在此修改checkbox的狀態為選中狀態是沒有效果的,點擊多選框還是會切換選中狀態。

2、由此想起應該還是默認事件影響的,只有取消相應的默認事件,經過查詢發現使用e.preventDefault();就可以取消。

<!DOCTYPE html>
<html>
<head>
<script src="/jquery/jquery-1.11.1.min.js">
</script>
<script>
$(document).ready(function(){
  $("#ckb").click(function(e){
    if(true){
       //條件不滿足,取消默認事件
       e.preventDefault();
       //條件不滿足,還原多選框的選中狀態
       //$(this).attr("checked",'true');
    }
    
  });
});
</script>
</head>
<body>
<input type="checkbox" id="ckb" checked/>啟用
</body>
</html>

測試發現,不管怎么點擊,checkbox始終都是選中狀態。這樣可以實現功能,問題解決了。

3、由此有個疑問:checkbox的瀏覽器的默認事件和點擊事件哪個先運行呢?為了驗證問題做了下面的測試

<!DOCTYPE html>
<html>
<head>
<script src="/jquery/jquery-1.11.1.min.js">
</script>
<script>
$(document).ready(function(){
  $("#ckb").click(function(e){
    if(true){
       //條件不滿足,取消默認事件
       e.preventDefault();
       alert($(this).attr("checked"));
       $(this).removeAttr("checked");
       alert($(this).attr("checked"));
    }
    
  });
});
</script>
</head>
<body>
<input type="checkbox" id="ckb" checked/>啟用
</body>
</html>

先取消瀏覽器的默認事件,在取消checkbox的選中屬性,發現多選框最后還是選中狀態。由此只能說明瀏覽器的默認事件是在點擊事件之后運行的。

正常情況下在鼠標點擊之前,checkbox的狀態是選中,那么在點擊checkbox時,它會將當前的狀態取反即取消選中,然后執行響應事件,最后默認事件將這個狀態生效。

上面的這個代碼中,由於去掉了默認事件,因此,在執行響應事件時,checkbox確實取消選中了,但是在事件結束時,由於沒有沒有默認事件,那么這個checkbox就回到了點擊之前的狀態。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM