DIV CSS 佈局教程網

jQuery事件用法詳解
編輯:JQuery入門技巧     

JavaScript在浏覽器中以單線程模式運行,頁面加載後,一旦頁面上所有的JavaScript代碼被執行完後,就只能依賴觸發事件來執行JavaScript代碼。

我們可以用jQuery這樣綁定一個click事件:

/* 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!');
});

jQuery能夠綁定的事件

鼠標事件

click: 鼠標單擊時觸發;
dblclick:鼠標雙擊時觸發;
mouseenter:鼠標進入時觸發;
mouseleave:鼠標移出時觸發;
mousemove:鼠標在DOM內部移動時觸發;
hover:鼠標進入和退出時觸發兩個函數,相當於mouseenter加上mouseleave。

鍵盤事件
鍵盤事件僅作用在當前焦點的DOM上,通常是<input>和<textarea>

keydown:鍵盤按下時觸發;
keyup:鍵盤松開時觸發;
keypress:按一次鍵後觸發

其他事件
ready僅作用於document對象。由於ready事件在DOM完成初始化後觸發,且只觸發一次,所以非常適合用來寫其他的初始化代碼。

focus:當DOM獲得焦點時觸發;
blur:當DOM失去焦點時觸發;
change:當<input>、<select>或<textarea>的內容改變時觸發;
submit:當<form>提交時觸發;
ready:當頁面被載入並且DOM樹完成初始化後觸發
下面的代碼沒有預期的效果:

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

因為JavaScript在此執行的時候,<form>尚未載入浏覽器,所以$('#testForm)返回[],並沒有綁定事件到任何DOM上

正確版本:

  <script>
    $(document).on('ready', function () {
      $('#testForm).on('submit', function () {
        alert('submit!');
      });
    });
  </script>

ready事件使用非常普遍,也這樣簡化:

$(document).ready(function () {
  $('#testForm).submit(function () {
    alert('submit!');
  });
});

甚至還可以再簡化為(最為常見):

$(function () {
  // init...
});

可以反復綁定事件處理函數,它們會依次執行:

$(function () {
  console.log('init A...');
});
$(function () {
  console.log('init B...');
});
$(function () {
  console.log('init C...');
});

事件參數

有些事件,如mousemove和keypress,我們需要獲取鼠標位置和按鍵的值,否則監聽這些事件就沒什麼意義了。所有事件都會傳入Event對象作為參數(下邊e就是一個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);

可以使用off('click')一次性移除已綁定的click事件的所有處理函數
無參數調用off()一次性移除已綁定的所有類型的事件處理函數

事件觸發條件

事件的觸發總是由用戶操作引發的。例如,我們監控文本框的內容改動,當用戶在文本框中輸入時,就會觸發change事件。但是,如果用JavaScript代碼去改動文本框的值,將不會觸發change事件。

有些時候,我們希望用代碼觸發change事件,可以直接調用無參數的change()方法來觸發該事件:

var input = $('#test-input');
input.val('change it!');
input.change(); // 觸發change事件

input.change()相當於input.trigger('change'),它是trigger()方法的簡寫。

浏覽器安全限制
在浏覽器中,有些JavaScript代碼只有在用戶觸發下才能執行,例如,window.open()函數。

以上就是本文的全部內容,希望對大家有所幫助,希望大家繼續關注的最新內容。

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved