一、默认事件
阻止默认事件,主流浏览器使用preventDefault()
,IE8及其以下,设置returnValue
属性,false
取消默认事件,true
不取消默认事件。
document.onselectstart = function(e) {
e = e || window.event;
//取消默认行为
if(e.preventDefault){
e.preventDefault();
}else{
e.returnValue = false;
}
console.log('文本选中')
};
document.oncontextmenu = function(e){
e = e || window.event;
//取消默认行为
if(e.preventDefault){
e.preventDefault();
}else{
e.returnValue = false;
}
console.log('右键菜单')
}
二、滚轮事件
- IE/Chrome使用
onmousewheel
,滚轮属性event.wheelDelta
,向上为120,向下为-120。 - Firefox使用
DOMMouseScroll
,必须使用addEventListener()
添加,滚轮属性event.detail
向上为-3,向下为3。
//鼠标滚轮事件
function mousewheelEvent(ele,fn,boole){
//判断是否为IE浏览器
if(ele.addEventListener){
//判断是否为火狐浏览器
if(ele.onmousewheel === undefined){//火狐
ele.addEventListener('DOMMouseScroll',fn,boole);
}else{//谷歌
ele.addEventListener('mousewheel',fn,boole);
}
}else if(ele.attachEvent){//ie浏览器
ele.attachEvent('onmousewheel',function(){
fn.call(ele);
});
}
}
mousewheelEvent(document,function(){
console.log(this);
});
三、表单事件
- 获取焦点事件,
onfocus
获取焦点事件<input>
、<textarea>
以及<select>
<a/>
元素。
obj.focus() //给指定的元素设置焦点,主动触发。
- 失去焦点事件,
onblur
失去焦点事件<input>
、<textarea>
以及<select>
<a/>
元素。
obj.blur() //取消指定元素的焦点,主动触发。
-
onchange
内容改变触发<input>
、<textarea>
以及<select>
元素。 -
onsubmit
提交事件,submit()
提交表单 。 -
onreset
重置事件,reset()
重置表单。
var oForm = document.querySelector('.user-reg'),
oUserName = oForm.querySelector('input[name=username]'),//使用css选择器的方式获取
oPassword = oForm.querySelector('input[name=psw]'),
oNum = oForm.querySelector('input[name=num]'),
oDes = oForm.querySelector('textarea'),
oLike = oForm.querySelector('select'),
oBtnBox = oForm.querySelector('.form-btn'),
oBtns = oBtnBox.querySelectorAll('button');
//监听一个获取焦点事件
oUserName.addEventListener('focus',function(){
console.log('获取焦点');
//this.value 就是input控件输入的值
if(this.value.length >= 10){
//主动失去焦点
}
});
oUserName.focus();//主动触发
//失去焦点事件
oUserName.addEventListener('blur',function(){
console.log('失去焦点');
});
//监听年龄的改变事件
oNum.addEventListener('change',function(){
//年龄必须是数字
if(parseInt(this.value)){
this.value = parseInt(this.value);
}else {
this.value = 0;
alert("请输入整型");
}
//this.value = parseInt(this.value) || 0;
console.log('改变事件');
});
//提交事件
oForm.addEventListener('submit',function(e){
//取消默认行为
e.preventDefault();
console.log('提交了');
});
//重置事件
oForm.addEventListener('reset',function(e){
//取消默认行为
e.preventDefault();
console.log('重置表单')
});
四、键盘事件
- 不是所有元素都能够接收键盘事件,能够响应用户输入的元素,能够接收焦点的元素就能够接收键盘事件,
document
能够响应。 -
keydown
:用户在键盘上按下某按键时发生,一直按着某按键则会不断触发(opera浏览器除外)。 -
keypress
:用户按下一个按键,并产生一个字符时发生(也就是不管类似shift、alt、ctrl之类的键,就是说用户按了一个能在屏幕上输出字符的按键keypress
事件才会触发)。一直按着某按键则会不断触发。 -
keyup
:用户释放某一个按键时触发。 -
event.keyCode
: 数字类型,键盘按键的值,键值。 -
ctrlKey
,shiftKey
,altKey
布尔值,当一个事件发生的时候,如果ctrl || shift || alt 是按下的状态,返回true,否则返回false。
//键盘按下
oDes.addEventListener('keydown',function(){
console.log('键盘按下');
console.log(e.keyCode);
});
//键盘输入
oDes.addEventListener('keypress',function(){
console.log('键盘输入')
});
//键盘释放
document.addEventListener('keyup',function(e){
console.log('文档键盘松开');
});
五、事件委托
-
e.target
主流浏览器下,触发事件最底的标签节点,返回的即使一个标签节点。 -
e.srcElement
IE浏览器下。
var index = null;
var oBox = document.querySelector('.box');
oBox.onclick = function(e) {
e = e || window.event;
//不存在就证明是ie
if(e.target === undefined){
e.target = e.srcElement;
}
//是li标签节点就添加class类名
if(e.target.nodeName == 'LI'){
if(index != null){
index.className = '';
}
e.target.className="on";
index = e.target;
}else{
console.log('不是li标签');
}
}