[JavaScript] (Day-26) - jQuery 事件

Make everything as simple as possible, but not simpler — Albert Einstein 把每件事,做简单到极致,但又不过于简单 - 阿尔伯特·爱因斯坦

由于不同的浏览器绑定事件的代码都不太一样,所以用jQuery来写代码,就屏蔽了不同浏览器的差异,我们总是编写相同的代码。

jQuery能够绑定的事件主要包括:

鼠标事件

  • click: 鼠标单击时触发;
  • dblclick:鼠标双击时触发;
  • mouseenter:鼠标进入时触发;
  • mouseleave:鼠标移出时触发;
  • mousemove:鼠标在DOM内部移动时触发;
  • hover:鼠标进入和退出时触发两个函数,相当于mouseenter加上mouseleave。

例如:

/* HTML:
 * <a id="test-link" href="#0">点我试试</a>
 */
// 获取超链接的jQuery对象:
var a = $('#test-link');
a.on('click', function () {
    alert('Hello!');
});

on方法用来绑定一个事件,我们需要传入事件名称和对应的处理函数。

另一种更简化的写法是直接调用click()方法:

a.click(function () {
    alert('Hello!');
});

两者完全等价。我们通常用后面的写法。


键盘事件

键盘事件仅作用在当前焦点的DOM上,通常是<input><textarea>

  • keydown:键盘按下时触发;
  • keyup:键盘松开时触发;
  • keypress:按一次键后触发。

其他事件

  • focus:当DOM获得焦点时触发;
  • blur:当DOM失去焦点时触发;
  • change:当<input>、<select><textarea>的内容改变时触发;
  • submit:当<form>提交时触发;
  • ready:当页面被载入并且 DOM 树完成初始化后触发。

其中,ready仅作用于document对象。由于ready事件在 DOM 完成初始化后触发,且只触发一次,所以非常适合用来写其他的初始化代码。

假设我们想给一个<form>表单绑定submit事件,下面的代码没有预期的效果:

<html>
<head>
    <script>
        // 代码有误:
        $('#testForm).on('submit', function () {
            alert('submit!');
        });
    </script>
</head>
<body>
    <form id="testForm">
        ...
    </form>
</body>

JavaScript 在此执行的时候,<form>尚未载入浏览器,所以$('#testForm)返回[],并没有绑定事件到任何 DOM 上

所以我们自己的初始化代码必须放到document对象的ready事件中,保证 DOM 已完成初始化:

<html>
<head>
    <script>
        $(document).on('ready', function () {
            $('#testForm).on('submit', function () {
                alert('submit!');
            });
        });
    </script>
</head>
<body>
    <form id="testForm">
        ...
    </form>
</body>

由于ready事件使用非常普遍,所以可以这样简化:

$(document).ready(function () {
    // on('submit', function)也可以简化:
    $('#testForm).submit(function () {
        alert('submit!');
    });
});

还可以再简化为:

$(function () {
    // init...
});
如果你遇到$(function () {...})的形式,牢记这是document对象的ready事件处理函数

事件参数

有些事件,如mousemovekeypress,我们需要获取鼠标位置和按键的值,否则监听这些事件就没什么意义了。所有事件都会传入Event 对象作为参数,可以从 Event 对象上获取到更多的信息

$(function () {
    $('#testMouseMoveDiv').mousemove(function (e) {
        $('#testMouseMoveSpan').text('pageX = ' + e.pageX + ', pageY = ' + e.pageY);
    });
});

取消绑定

一个已被绑定的事件可以解除绑定,通过off('click', function)实现


function hello() {
    alert('hello!');
}

a.click(hello); // 绑定事件

// 10秒钟后解除绑定:
setTimeout(function () {
    a.off('click', hello);
}, 10000);

事件触发条件

事件的触发总是由用户操作引发的

监控文本框的内容改动

var input = $('#test-input');
input.change(function () {
    console.log('changed...');
});

当用户在文本框中输入时,就会触发change事件。但是,如果用JavaScript 代码去改动文本框的值,将不会触发change事件。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 总结: 鼠标事件 1.click与dbclick事件$ele.click()$ele.click(handler(...
    阿r阿r阅读 1,628评论 2 10
  • 选择器选择器是jQuery的核心。 事件 动画 扩展
    wyude阅读 485评论 0 1
  • 排球第一场 打影视落幕了。 很高兴影视派了一支拉拉队。 早早结束比赛。 还能看看男排打球。(超帅) 一年只和我说一...
    反正我们也不赶时间阅读 298评论 0 0
  • 一想到马超,就想起他呲牙咧嘴的笑。也许是因为缺乏某种元素,他的牙齿不好,虎牙很大,和旁边的叠在一起,呲牙大笑的时候...
    laika阅读 643评论 0 2
  • 给江湖下个令。谁不从斩。哈哈哈
    extends阅读 237评论 1 1