js阻止默认行为

一.哪些默认行为要作阻止html

1.a标签连接跳转浏览器

什么是默认行为?一个最简单的例子,我有一个a标签:spa

<a href="https://www.baidu.com/" target="_blank">百度</a>

咱们预览打开,点击百度两个字就会打开百度页面,点击后连接地址跳转就是a标签的默认行为。code

咱们有没有办法在a点击后让他不跳转的处理呢?这是确定有的,a在点击会触发click事件,咱们只要在回调中加入事件阻止方法就能够阻止跳转发生:orm

<a href="https://www.baidu.com/" target="_blank" id="skip">百度</a>
var skip=document.getElementById("skip");
skip.onclick=function(event){
 event.preventDefault();
};

再次点击百度,还会停留在当前页面,固然除了调用事件对象的阻止方法还能够用下面的处理:htm

skip.onclick=function(event){
 return false;
};

2.form表单提交对象

除了a的默认跳转行为,其实表单的提交行为不少时候咱们也要进行阻止,固然是由于有表单验证了,由于输入问题而去阻止提交:事件

<form action="11.html" id="form">
<input type="text" id="text">
<span id="ti"></span>
<input type="submit">
</form>
var form=document.getElementById("form");
var text=document.getElementById("text");
var ti=document.getElementById("ti");
form.onsubmit=function(event){
 var val=text.value;
 if(val.length<6){
  ti.innerHTML="长度小于6";
  event.preventDefault();
 }; 
};

若是input的长度小于6就会提示错误。做为提交表单验证阻止默认是必须的。ip

event.preventDefault();在低级ie存在不兼容问题,可是return false是兼容的。get

结论:

阻止默认行为方法1(高级浏览器/w3c标准的):event.preventDefault()

阻止默认行为方法2:return false

 

二.event.preventDefault()和return false对比

仍是对表单处理作修改:

var form=document.getElementById("form");
var text=document.getElementById("text");
var ti=document.getElementById("ti");
form.onsubmit=function(event){
 var val=text.value;
 if(val.length<6){
  ti.innerHTML="长度小于6";
  event.preventDefault();
  alert("我在阻止后弹出!")
 }; 
};

不会提交跳转,而且弹出了后面的程序。

var form=document.getElementById("form");
var text=document.getElementById("text");
var ti=document.getElementById("ti");
form.onsubmit=function(event){
 var val=text.value;
 if(val.length<6){
  ti.innerHTML="长度小于6";
  return false;
  alert("我在阻止后弹出!")
 }; 
};

不会提交跳转,不事后面程序不会执行,咱们知道return一经使用就是程序终止,带有break的做用。

有人会想,我return 别的会不会也阻止跳转:

var form=document.getElementById("form");
var text=document.getElementById("text");
var ti=document.getElementById("ti");
form.onsubmit=function(event){
 var val=text.value;
 if(val.length<6){
  ti.innerHTML="长度小于6";
  return 0;
  alert("我在阻止后弹出!")
 }; 
};

很遗憾,提交成功了。

结论:

只有返回false才会阻止,与return自带break处理无关,阻止行为只是判断你返不返回false。

相关文章
相关标签/搜索