sự kiện nhấp chuột js. Trình tự thực thi script. Sự kiện onclick trong JavaScript và ba cách xử lý sự kiện

Xử lý sự kiện

Các chương trình khách hàng dành cho JavaScript dựa trên mô hình lập trình trong đó việc thực thi chương trình được điều khiển theo sự kiện. Với phong cách lập trình này, trình duyệt web sẽ tạo ra một sự kiện khi có điều gì đó xảy ra với tài liệu hoặc một số thành phần của nó. Ví dụ: trình duyệt web tạo ra một sự kiện khi tải xong tài liệu khi người dùng di chuột qua siêu liên kết hoặc nhấn một phím trên bàn phím.

Nếu một ứng dụng JavaScript quan tâm đến một loại sự kiện cụ thể cho yếu tố cụ thể document, nó có thể đăng ký một hoặc nhiều hàm sẽ được gọi khi sự kiện này xảy ra. Xin lưu ý rằng đây không phải là tính năng độc đáo lập trình web: tất cả các ứng dụng có Giao diện đồ họa Người dùng hành động theo cách này - họ liên tục chờ đợi điều gì đó xảy ra (tức là đợi sự kiện xuất hiện) và phản hồi những gì xảy ra.

Loại sự kiện là một chuỗi xác định loại hành động gây ra sự kiện. Ví dụ: kiểu "mousemove" có nghĩa là người dùng đã di chuyển con trỏ chuột. Loại "keydown" có nghĩa là một phím trên bàn phím đã được nhấn. Và loại "tải" có nghĩa là quá trình tải xuống tài liệu (hoặc một số tài nguyên khác) từ mạng đã hoàn tất. Vì loại sự kiện chỉ là một chuỗi nên đôi khi nó được gọi là tên sự kiện.

Mục tiêu của một sự kiện là đối tượng mà sự kiện đó xảy ra hoặc liên quan đến sự kiện đó. Khi nói về một sự kiện, người ta thường đề cập đến thể loại và mục đích của sự kiện đó. Ví dụ: sự kiện "tải" của đối tượng Window hoặc sự kiện "nhấp chuột" của . Mục tiêu tiêu biểu nhất của các sự kiện trong ứng dụng khách trong JavaScript là các đối tượng Window, Document và Element, nhưng một số loại sự kiện có thể xảy ra trong các loại đối tượng khác.

Trình xử lý sự kiện là một hàm xử lý hoặc phản hồi một sự kiện. Các ứng dụng phải đăng ký các chức năng xử lý sự kiện của chúng với trình duyệt web, chỉ định loại sự kiện và mục đích. Khi một sự kiện thuộc loại đã chỉ định xảy ra trên mục tiêu đã chỉ định, trình duyệt sẽ gọi trình xử lý. Khi trình xử lý sự kiện được gọi trên một đối tượng, đôi khi chúng tôi nói rằng trình duyệt đã "nâng" hoặc "ném" sự kiện.

Đối tượng sự kiện là một đối tượng được liên kết với một sự kiện cụ thể và chứa thông tin về sự kiện đó. Các đối tượng sự kiện được chuyển đến hàm xử lý sự kiện dưới dạng đối số (ngoại trừ IE8 và các phiên bản mới hơn phiên bản trước, trong đó đối tượng sự kiện chỉ khả dụng dưới dạng biến sự kiện toàn cục). Tất cả các đối tượng sự kiện đều có thuộc tính kiểu, xác định loại sự kiện và thuộc tính mục tiêu, xác định mục đích của sự kiện.

Đối với mỗi loại sự kiện, một tập hợp thuộc tính được xác định trong đối tượng sự kiện liên quan. Ví dụ: một đối tượng được liên kết với các sự kiện chuột bao gồm tọa độ của con trỏ chuột và một đối tượng được liên kết với các sự kiện bàn phím chứa thông tin về phím được nhấn và các phím bổ trợ được nhấn. Đối với nhiều loại sự kiện, chỉ các thuộc tính tiêu chuẩn như loại và mục tiêu mới được xác định và không có thuộc tính bổ sung nào được chuyển. thông tin hữu ích. Đối với những loại sự kiện này, sự xuất hiện đơn thuần của sự kiện là quan trọng và không có thông tin nào khác có liên quan.

Tuyên truyền sự kiện là quá trình trình duyệt quyết định đối tượng nào sẽ gọi trình xử lý sự kiện. Trong trường hợp các sự kiện nhằm mục đích đối tượng duy nhất(chẳng hạn như sự kiện “load” của đối tượng Window), không cần phải truyền bá chúng. Tuy nhiên, khi một sự kiện xảy ra trên một thành phần tài liệu, nó sẽ lan truyền hoặc "bong bóng" lên cây tài liệu.

Nếu người dùng nhấp vào siêu liên kết, sự kiện "di chuyển chuột" trước tiên sẽ xuất hiện trên phần tử , xác định liên kết này. Sau đó nó sẽ được gửi đến các phần tử chứa: có lẽ phần tử

Phần tử và chính đối tượng Document. Đôi khi sẽ thuận tiện hơn khi đăng ký một trình xử lý sự kiện trên một đối tượng Document hoặc phần tử vùng chứa khác hơn là đăng ký trên tất cả các phần tử quan tâm.

Sau khi xác định được một số thuật ngữ, chúng ta có thể chuyển sang khám phá các vấn đề liên quan đến sự kiện và quá trình xử lý chúng.

Đăng ký xử lý sự kiện

Có hai cách chính để đăng ký trình xử lý sự kiện. Cách đầu tiên, xuất hiện sớm trong quá trình phát triển World Wide Web, là đặt thuộc tính của đối tượng hoặc thành phần tài liệu là mục tiêu của sự kiện. Phương thức thứ hai, mới hơn và phổ biến hơn, là truyền một hàm xử lý cho một phương thức của một đối tượng hoặc một phần tử.

Vấn đề trở nên phức tạp bởi thực tế là mỗi kỹ thuật đều có hai phiên bản. Bạn có thể đặt thuộc tính xử lý sự kiện trong mã JavaScript hoặc trong thành phần tài liệu bằng cách xác định trực tiếp thuộc tính tương ứng trong đánh dấu HTML. Việc đăng ký trình xử lý bằng lệnh gọi phương thức có thể được thực hiện bằng phương thức tiêu chuẩn có tên addEventListener(), được hỗ trợ bởi tất cả các trình duyệt ngoại trừ IE phiên bản 8 trở xuống và một phương thức khác gọi là AttachEvent(), được hỗ trợ bởi tất cả các phiên bản IE cho đến IE9.

Đặt thuộc tính xử lý sự kiện

Cách đơn giản nhất để đăng ký trình xử lý sự kiện là đặt thuộc tính của mục tiêu sự kiện thành hàm xử lý mong muốn. Theo quy ước, các thuộc tính của trình xử lý sự kiện có tên bao gồm từ "bật", theo sau là tên sự kiện: onclick, onchange, onload, onmouseover, v.v. Lưu ý rằng các tên thuộc tính này phân biệt chữ hoa chữ thường và chỉ sử dụng các ký tự chữ thường, ngay cả khi tên loại sự kiện có nhiều từ (ví dụ: "readystatechange"). Dưới đây là hai ví dụ về việc đăng ký xử lý sự kiện:

// Gán hàm cho thuộc tính onload của đối tượng Window. // Hàm này là một trình xử lý sự kiện: nó được gọi khi tài liệu được tải window.onload = function() ( // Tìm phần tử var elt = document.getElementById("shipping_address"); // Đăng ký một trình xử lý sự kiện sẽ được gọi // trực tiếp trước khi gửi biểu mẫu elt.onsubmit = function() ( return validation(this); ) )

Phương pháp đăng ký trình xử lý sự kiện này được hỗ trợ trong tất cả các trình duyệt cho tất cả các loại sự kiện thường được sử dụng. Nói chung, tất cả các giao diện ứng dụng được hỗ trợ rộng rãi xác định sự kiện của chúng đều cho phép đăng ký trình xử lý bằng cách đặt thuộc tính của trình xử lý sự kiện.

Nhược điểm của việc sử dụng các thuộc tính xử lý sự kiện là chúng được thiết kế với giả định rằng các mục tiêu sự kiện sẽ có nhiều nhất một trình xử lý cho mỗi loại sự kiện. Khi tạo một thư viện để sử dụng trong các tài liệu tùy ý, tốt hơn nên sử dụng một kỹ thuật (chẳng hạn như gọi phương thức addEventListener()) để đăng ký các trình xử lý không thay đổi hoặc ghi đè các trình xử lý đã đăng ký trước đó.

Đặt thuộc tính xử lý sự kiện

Các thuộc tính của trình xử lý sự kiện trên các thành phần tài liệu cũng có thể được thiết lập bằng cách xác định các giá trị thuộc tính trong các thẻ HTML tương ứng. Trong trường hợp này, giá trị thuộc tính phải là một chuỗi mã JavaScript. Mã chương trình này không phải là một khai báo đầy đủ về hàm xử lý sự kiện mà chỉ là phần thân của nó. Nghĩa là, việc triển khai trình xử lý sự kiện trong đánh dấu HTML không được đặt trong dấu ngoặc nhọn và trước từ khóa hàm. Ví dụ:

Nếu giá trị của thuộc tính HTML xử lý sự kiện bao gồm nhiều câu lệnh JavaScript thì chúng phải được phân tách bằng dấu chấm phẩy hoặc giá trị thuộc tính phải xuất hiện trên nhiều dòng.

Một số loại sự kiện dành cho toàn bộ trình duyệt, thay vì dành cho bất kỳ thành phần tài liệu cụ thể nào. Trình xử lý các sự kiện như vậy trong JavaScript được đăng ký trong đối tượng Window. Trong đánh dấu HTML, chúng phải được đặt trong một thẻ, nhưng trình duyệt sẽ đăng ký chúng trong đối tượng Window. Sau đây là danh sách đầy đủ các trình xử lý sự kiện như vậy được xác định theo đặc tả HTML5 dự thảo:

onafterprint ontập trung trực tuyến vàothay đổi kích thước trước khi in onhashchange trên trang ẩn lưu trữ trên trước khi dỡ tải trên trang hiển thị hoàn tác làm mờ tin nhắn trênpopstate onunload onlỗi onoffline onredo

Khi phát triển các tập lệnh phía máy khách, thông lệ là tách phần đánh dấu HTML khỏi mã JavaScript. Các lập trình viên tuân theo quy tắc này sẽ tránh (hoặc ít nhất là cố gắng tránh) sử dụng các thuộc tính xử lý sự kiện HTML để tránh trộn lẫn mã JavaScript với đánh dấu HTML.

addEventListener()

Trong mô hình sự kiện tiêu chuẩn, được hỗ trợ bởi tất cả các trình duyệt ngoại trừ IE phiên bản 8 trở xuống, mục tiêu của một sự kiện có thể là bất kỳ đối tượng nào - bao gồm các đối tượng Window và Document và tất cả các đối tượng Elements của các thành phần tài liệu - xác định một phương thức có tên addEventListener() với sự kiện nào trình xử lý có thể được đăng ký cho mục đích này.

Phương thức addEventListener() nhận ba đối số. Đầu tiên là loại sự kiện mà trình xử lý được đăng ký. Loại sự kiện (hoặc tên) phải là một chuỗi và không được bao gồm tiền tố "bật" được sử dụng khi đặt thuộc tính của trình xử lý sự kiện. Đối số thứ hai của phương thức addEventListener() là một hàm sẽ được gọi khi xảy ra một sự kiện thuộc loại đã chỉ định. Đối số cuối cùng được truyền cho phương thức addEventListener() với giá trị boolean. Thông thường lập luận này là sai. Nếu bạn chuyển giá trị này thành đúng thì hàm sẽ được đăng ký làm trình xử lý chặn và sẽ được gọi trong một giai đoạn khác của quá trình lan truyền sự kiện.

Đặc tả cuối cùng có thể thay đổi để có thể chấp nhận việc bỏ qua đối số thứ ba thay vì chuyển nó thành sai một cách rõ ràng, nhưng theo văn bản này, việc bỏ qua đối số thứ ba sẽ dẫn đến lỗi trong một số trình duyệt hiện tại.

Đoạn mã sau đăng ký hai trình xử lý sự kiện "nhấp chuột" trên phần tử. Lưu ý sự khác biệt giữa hai kỹ thuật được sử dụng:

Nhấp vào đây! var b = document.getElementById("mybutton"); b.onclick = function() ( cảnh báo ("Cảm ơn bạn đã nhấp vào tôi!"); ); b.addEventListener("click", function() (alert("Xin cảm ơn lần nữa!")), false);

Việc gọi phương thức addEventListener() với chuỗi "click" làm đối số đầu tiên không ảnh hưởng đến giá trị của thuộc tính onclick. Trong đoạn mã trên, việc nhấp vào nút sẽ xuất hiện hai hộp thoại cảnh báo(). Nhưng quan trọng hơn, phương thức addEventListener() có thể được gọi nhiều lần và có thể được sử dụng để đăng ký nhiều hàm xử lý cho cùng một loại sự kiện trong cùng một đối tượng. Khi một sự kiện xảy ra trên một đối tượng, tất cả các trình xử lý đã đăng ký cho loại sự kiện đó sẽ được gọi theo thứ tự chúng đã được đăng ký.

Việc gọi phương thức addEventListener() nhiều lần trên cùng một đối tượng với cùng đối số sẽ không có tác dụng - hàm xử lý chỉ được đăng ký một lần và các lệnh gọi lặp lại không ảnh hưởng đến thứ tự mà các trình xử lý được gọi.

Kết hợp với phương thức addEventListener() là phương thức RemoveEventListener(), phương thức này nhận ba đối số giống nhau, nhưng thay vì thêm, nó loại bỏ một hàm xử lý khỏi đối tượng. Điều này thường hữu ích khi bạn cần đăng ký một trình xử lý sự kiện tạm thời và sau đó xóa nó vào một lúc nào đó.

Các phiên bản Internet Explorer cũ hơn IE9 không hỗ trợ các phương thức addEventListener() và RemoveEventListener(). IE5 trở lên xác định các phương thức tương tự, AttachEvent() và detectEvent() . Bởi vì mô hình sự kiện IE không hỗ trợ giai đoạn chặn nên các phương thức AttachEvent() và táchEvent() chỉ lấy hai đối số: loại sự kiện và hàm xử lý, với đối số đầu tiên chuyển tên thuộc tính trình xử lý có tiền tố “bật” vào các phương thức trong IE thay vì các loại sự kiện không có tiền tố này.

Gọi trình xử lý sự kiện

Khi bạn đăng ký một trình xử lý sự kiện, trình duyệt web sẽ tự động gọi nó khi một sự kiện thuộc loại đã chỉ định xảy ra trên đối tượng đã chỉ định. Phần này nêu chi tiết thứ tự mà các trình xử lý sự kiện được gọi, các đối số của các trình xử lý, bối cảnh của lệnh gọi (giá trị của this) và mục đích của giá trị trả về của trình xử lý. Thật không may, một số chi tiết này khác nhau giữa phiên bản IE 8 trở xuống và các trình duyệt khác.

Đối số xử lý sự kiện

Khi một trình xử lý sự kiện được gọi, nó thường (với một ngoại lệ, được thảo luận bên dưới) chuyển đối tượng sự kiện dưới dạng một đối số duy nhất. Các thuộc tính của đối tượng sự kiện chứa thông tin bổ sung về sự kiện. Ví dụ: thuộc tính loại xác định loại sự kiện đã xảy ra.

Trong IE phiên bản 8 trở xuống, trình xử lý sự kiện được đăng ký bằng cách đặt thuộc tính sẽ không được chuyển đối tượng sự kiện khi được gọi. Thay vào đó, đối tượng sự kiện được lưu trữ trong biến toàn cục window.event. Để có tính di động, các trình xử lý sự kiện có thể được tạo kiểu như sau để chúng sử dụng biến window.event khi được gọi mà không có đối số:

Đối tượng sự kiện được chuyển tới các trình xử lý sự kiện đã đăng ký bằng phương thức AttachEvent(), nhưng chúng cũng có thể sử dụng biến window.event.

Khi bạn đăng ký trình xử lý sự kiện bằng thuộc tính HTML, trình duyệt sẽ chuyển đổi một chuỗi mã JavaScript thành một hàm. Các trình duyệt khác ngoài IE tạo một hàm với một đối số duy nhất, sự kiện. IE tạo ra một hàm không có đối số. Nếu bạn sử dụng mã định danh sự kiện trong các hàm như vậy, nó sẽ tham chiếu đến window.event. Trong cả hai trường hợp, trình xử lý sự kiện được xác định trong đánh dấu HTML có thể tham chiếu đối tượng sự kiện bằng mã định danh sự kiện.

Bối cảnh xử lý sự kiện

Khi một trình xử lý sự kiện được đăng ký bằng cách đặt một thuộc tính, nó trông giống như xác định một phương thức thành phần tài liệu mới:

E.onclick = function() ( /* triển khai trình xử lý */ );

Do đó, không có gì đáng ngạc nhiên khi các trình xử lý sự kiện được gọi (với một ngoại lệ liên quan đến IE, được mô tả bên dưới) như các phương thức của các đối tượng mà chúng được xác định trong đó. Nghĩa là, trong phần thân của trình xử lý sự kiện, từ khóa this đề cập đến mục tiêu của sự kiện.

Trong các trình xử lý, từ khóa this đề cập đến đối tượng đích, ngay cả khi chúng được đăng ký bằng phương thức addEventListener(). Tuy nhiên, thật không may, đây không phải là trường hợp của phương thức AttachEvent(): các trình xử lý được đăng ký với phương thức AttachEvent() được gọi là các hàm và trong đó từ khóa this đề cập đến đối tượng (Window) toàn cục. Vấn đề này có thể được giải quyết theo cách sau:

/* Đăng ký hàm đã chỉ định làm trình xử lý sự kiện của loại đã chỉ định trong đối tượng đã chỉ định. Đảm bảo rằng trình xử lý sẽ luôn được gọi như một phương thức trên đối tượng đích. */ function addEvent(target, type, handler) ( if (target.addEventListener) target.addEventListener(type, handler, false); else target.attachEvent("on" + type, function(event) ( // Gọi trình xử lý làm phương thức đích, // và truyền cho nó đối tượng sự kiện return handler.call(target, event ));

Lưu ý rằng các trình xử lý sự kiện được đăng ký theo cách này không thể bị xóa vì tham chiếu đến hàm bao bọc được truyền cho phương thức AttachEvent() không được lưu trữ ở bất kỳ đâu để nó có thể được chuyển sang phương thức tách raEvent().

Giá trị trả về của trình xử lý

Giá trị được trả về bởi trình xử lý sự kiện đã đăng ký bằng cách đặt thuộc tính đối tượng hoặc thuộc tính HTML phải được tính đến. Thông thường, việc trả về false sẽ cho trình duyệt biết rằng nó không nên thực hiện các hành động mặc định cho sự kiện này.

Ví dụ: trình xử lý onclick của nút gửi biểu mẫu có thể trả về sai để ngăn trình duyệt gửi biểu mẫu. (Điều này có thể hữu ích nếu dữ liệu nhập của người dùng không xác thực được phía máy khách.) Tương tự, trình xử lý sự kiện onkeypress của trường nhập có thể lọc dữ liệu nhập từ bàn phím bằng cách trả về sai khi nhập các ký tự không hợp lệ.

Điều quan trọng nữa là giá trị được trả về bởi trình xử lý onb Beforeunload của đối tượng Window. Sự kiện này được tạo khi trình duyệt điều hướng đến một trang khác. Nếu trình xử lý này trả về một chuỗi, nó sẽ được hiển thị trong hộp thoại phương thức nhắc người dùng xác nhận rằng họ muốn rời khỏi trang.

Điều quan trọng là phải hiểu rằng giá trị trả về của trình xử lý sự kiện chỉ được tính nếu trình xử lý được đăng ký bằng cách đặt thuộc tính. Thay vào đó, các trình xử lý đã đăng ký với addEventListener() hoặc AttachEvent() phải gọi phương thức PreventDefault() hoặc đặt thuộc tính returnValue của đối tượng sự kiện.

Hủy sự kiện

Giá trị được trả về bởi trình xử lý sự kiện đã đăng ký làm thuộc tính có thể được sử dụng để ghi đè các hành động mặc định của trình duyệt trong trường hợp xảy ra sự kiện đó. Trong các trình duyệt hỗ trợ phương thức addEventListener(), các hành động mặc định cũng có thể bị ghi đè bằng cách gọi phương thức PreventDefault() của đối tượng sự kiện. Tuy nhiên, trong IE phiên bản 8 trở xuống, hiệu ứng tương tự đạt được bằng cách đặt thuộc tính returnValue của đối tượng sự kiện thành false.

Đoạn mã sau minh họa trình xử lý sự kiện nhấp chuột siêu liên kết sử dụng cả ba phương pháp hủy sự kiện (chặn người dùng theo liên kết):

Window.onload = function() ( // Tìm tất cả các liên kết var a_href = document.getElementsByTagName("a"); // Thêm trình xử lý sự kiện click (không dành cho IE

Dự án mô-đun DOM Events 3 hiện tại xác định một thuộc tính trên đối tượng Sự kiện có tên là defaultPrevented. Nó chưa được tất cả các trình duyệt hỗ trợ, nhưng bản chất của nó là trong điều kiện bình thường, nó sai và chỉ trở thành đúng nếu phương thức PreventDefault() được gọi.

Việc hủy các hành động mặc định liên quan đến một sự kiện chỉ là một kiểu hủy sự kiện. Cũng có thể ngăn chặn sự kiện lan rộng. Trong các trình duyệt hỗ trợ phương thức addEventListener(), đối tượng sự kiện có phương thức stopPropagation(), phương thức này khi được gọi sẽ dừng việc truyền bá thêm sự kiện. Nếu các trình xử lý khác cho sự kiện này được đăng ký trên cùng một đối tượng đích thì các trình xử lý còn lại sẽ vẫn được gọi, nhưng không có trình xử lý sự kiện nào khác trên các đối tượng khác sẽ được gọi sau khi phương thức stopPropagation() được gọi.

Trong IE phiên bản 8 trở xuống, phương thức stopPropagation() không được hỗ trợ. Thay vào đó, đối tượng sự kiện trong IE có thuộc tính hủy bỏBong bóng. Việc đặt thuộc tính này thành true sẽ ngăn sự kiện lan truyền.

Bản nháp hiện tại của đặc tả Sự kiện DOM 3 xác định một phương thức khác trên đối tượng Sự kiện, một phương thức có tên là stopImmediatePropagation(). Giống như phương thức stopPropagation(), nó ngăn sự kiện lan truyền sang bất kỳ đối tượng nào khác. Nhưng ngoài ra, nó cũng ngăn không cho bất kỳ trình xử lý sự kiện nào khác được đăng ký trên cùng một đối tượng được gọi.

Một trong những tính năng quan trọng nhất của ngôn ngữ JavaScript, có lẽ là tính năng chính của ngôn ngữ này, là khả năng xử lý một số sự kiện. Tính năng này là một tính năng của JavaScript so với các ngôn ngữ lập trình web khác, vì chỉ có ngôn ngữ này mới làm được điều này.

Sự kiện và trình xử lý sự kiện là gì

Sự kiện là một hành động có thể được thực hiện bởi người dùng hoặc các đối tượng khác trên trang.

Ví dụ nổi bật nhất của một sự kiện là người dùng nhấp vào một đối tượng nào đó ( nhấp chuột), có thể là nút, liên kết hoặc bất kỳ phần tử nào khác. Một ví dụ khác về sự kiện là di chuột qua một đối tượng nào đó ( Di chuột lên trên), nói ở trên hình ảnh. Ngoài ra sự kiện này là việc tải trang hoàn chỉnh ( trọng tải). Nói chung, tất cả các hành động xảy ra trên trang web đều là sự kiện.

Vì vậy, chúng tôi có thể nắm bắt bất kỳ sự kiện nào xảy ra trên trang và xử lý nó bằng trình xử lý thích hợp. Ví dụ: khi bạn di chuột qua khối div, chúng tôi có thể hiển thị một thông báo nhất định, ví dụ: “Bạn đang ở vùng văn bản”. Hoặc khi bạn nhấp vào nút, hãy ẩn một khối khỏi trang. Nói chung, có rất nhiều việc có thể được thực hiện trước khi xử lý một sự kiện.

Và để xử lý một sự kiện, bạn cần sử dụng một trình xử lý đặc biệt cho sự kiện này. Mỗi sự kiện có trình xử lý riêng, ví dụ: sự kiện click( nhấp chuột) có một trình xử lý trong một cái nhấp chuột. Sự kiện di chuột qua một đối tượng ( Di chuột lên trên) có một trình xử lý di chuột qua. Và sự kiện tải đầy trang ( trọng tải) có một trình xử lý đang tải.

Tức là, như bạn hiểu, tên của trình xử lý được hình thành từ tiền tố “on” + tên của sự kiện.

Bạn có thể tìm thấy danh sách đầy đủ các sự kiện và trình xử lý trong sách tham khảo; trong bài viết này chúng tôi sẽ chỉ xem xét những sự kiện được sử dụng thường xuyên nhất.

Trình xử lý sự kiện được gọi như một thuộc tính trong chính thẻ phần tử HTML. Bạn có thể viết ngay mã JavaScript vào giá trị xử lý, nhưng tốt hơn là nên gọi một số hàm sẽ thực hiện các hành động cần thiết. Hàm phải được mô tả bên trong thẻ script, thẻ này có thể nằm bên trong khối head hoặc ở cuối thẻ body. Từ this, tức là đối tượng hiện tại, được truyền dưới dạng tham số cho hàm này.

Bây giờ hãy viết một ví dụ đơn giản. Khi bạn di chuột qua khối có văn bản, chúng tôi sẽ hiển thị thông báo bằng phương thức cảnh báo cho biết người dùng đang ở trong vùng văn bản.

Lorem Ipsum chỉ đơn giản là văn bản giả của ngành in ấn và sắp chữ. Lorem Ipsum đã trở thành văn bản giả tiêu chuẩn của ngành kể từ những năm 1500, khi một nhà in vô danh lấy một tập bản in và xáo trộn nó để tạo thành một cuốn sách mẫu.

Div( đệm-trái: 50px; chiều rộng: 200px; đường viền: 1px rắn #000; )

Mã JavaScript:

Chức năng blockOver(block)( cảnh báo("Bạn đang ở trong vùng văn bản "); )

Chúng tôi lưu tài liệu, mở nó trong trình duyệt, di con trỏ chuột lên văn bản và xem kết quả xử lý sự kiện này:


Làm cách nào để lấy giá trị của một thuộc tính trong javascript?

Sử dụng tham số hàm (this), bạn có thể lấy giá trị của một số thuộc tính của đối tượng hiện tại, ví dụ: tìm ra id của nó.

Ví dụ: hãy tạo một nút và đặt cho nó một id có giá trị "justButton". Khi nhấp vào nút này, chúng tôi sẽ hiển thị thông báo sau: “Bạn đã nhấp vào nút có giá trị nhận dạng_id.” Ở đây bạn cần phải sử dụng trình xử lý onclick.

Mã JavaScript:

Chức năng clickOnButton(button)( cảnh báo("Bạn đã nhấp vào nút có mã định danh: " + Button.id); )

Lưu tài liệu, mở nó trong trình duyệt và nhấp vào nút.


Theo cách tương tự, bạn có thể hiển thị tên của nút ( nút.name) hoặc giá trị của nó ( nút.value)

Lấy chiều rộng và chiều cao của một phần tử

Bạn cũng có thể tìm hiểu các giá trị thuộc tính CSS của một phần tử, ví dụ: chiều rộng và chiều cao. Các thuộc tính clientWidth và offsetWidth được sử dụng để lấy chiều rộng và các thuộc tính clientHeight và offsetHeight được sử dụng để lấy chiều cao. Ví dụ: hãy hiển thị chiều rộng và chiều cao của nút được nhấp vào.

Bây giờ nội dung của hàm clickOnButton sẽ như thế này:

Chức năng clickOnButton(button)( //alert("Bạn đã nhấp vào nút có ID: " + Button.id); var width = nút.clientWidth || nút.offsetWidth; var Height = nút.clientHeight || nút.offsetHeight; cảnh báo ("Chiều rộng nút: " + chiều rộng + "\nChiều cao nút: " + chiều cao);

Kết quả của ví dụ này:


Hãy để tôi nhắc bạn rằng chiều rộng của phần tử được tính cùng với giá trị phần đệm, do đó, nó bằng 111px [ 99px(width) + 6px(padding-left) + 6px(padding-right) ].

Nếu không cần viết nhiều mã để xử lý một sự kiện, bạn có thể viết mã này trực tiếp vào giá trị xử lý. Nghĩa là, thay vì gọi một hàm, chúng ta viết ngay đoạn mã cần thiết.

Ví dụ: khi tải một trang, bạn có thể hiển thị thông báo "trang đang tải". Để làm điều này, bạn cần sử dụng sự kiện tải và trình xử lý onload của nó. Chúng tôi sẽ viết trình xử lý này trong thẻ body mở.

Phương pháp này chỉ có thể được sử dụng nếu chỉ cần một dòng mã ngắn để xử lý sự kiện. Mặt khác, nếu mã xử lý bao gồm một dòng dài hoặc nhiều dòng thì bạn cần sử dụng hàm.

Và ở cuối bài viết này, chúng ta sẽ xem xét một ví dụ đơn giản về xử lý biểu mẫu. Việc xử lý biểu mẫu bằng JavaScript, trước hết, giúp giảm tải cho máy chủ và thứ hai, mang lại lợi thế bổ sung cho khả năng sử dụng của trang web.

Biểu mẫu bao gồm một trường đăng nhập và nút gửi. Khi gửi biểu mẫu, chúng tôi sẽ kiểm tra thời lượng đăng nhập. Độ dài của nó phải nhiều hơn ba ký tự.

Hãy bắt đầu với cấu trúc HTML của biểu mẫu này.

Bây giờ, hãy thêm trình xử lý onsubmit cho sự kiện gửi dưới dạng thuộc tính cho thẻ biểu mẫu. Theo cách sau:

Sự kiện gửi xảy ra khi biểu mẫu được gửi. Chúng tôi đã viết câu lệnh trả về để ngăn việc gửi biểu mẫu nếu phát hiện thấy lỗi trong quá trình nhập dữ liệu. Nếu hàm trả về false thì giá trị của trình xử lý onsubmit sẽ là “return false”, nghĩa là biểu mẫu sẽ không được gửi đến máy chủ. Ngược lại, nếu biểu mẫu trả về true thì giá trị của trình xử lý sẽ là “return true” và biểu mẫu sẽ được gửi mà không gặp vấn đề gì.

Đôi khi cần phải tắt hoàn toàn việc gửi biểu mẫu, trong trường hợp đó, giá trị của trình xử lý onsubmit sẽ như sau:

Onsubmit = "checkForm(this); trả về sai;"

Như bạn có thể đã đoán, checkForm là tên của hàm sẽ được gọi khi sự kiện gửi xảy ra. Bạn có thể gọi nó là bất cứ điều gì bạn muốn, tuân theo các quy ước đặt tên hàm.

Và vì vậy, hãy quay lại ví dụ của chúng tôi. Bây giờ chúng ta cần mô tả hàm checkForm. Nó sẽ chứa điều kiện sau: nếu độ dài đăng nhập nhỏ hơn ba ký tự thì chúng tôi trả về sai và biểu mẫu sẽ không được gửi, nếu không, nếu dữ liệu được nhập chính xác thì chúng tôi sẽ gửi biểu mẫu đến máy chủ.

Hàm checkForm(form)( //Lấy giá trị của trường biểu mẫu có tên đăng nhập var login = form.login.value; //Kiểm tra xem độ dài đăng nhập có nhỏ hơn ba ký tự hay không, sau đó hiển thị thông báo lỗi và hủy gửi form. if(login .length > 3)( cảnh báo("Độ dài đăng nhập phải nhiều hơn ba ký tự"); return false; )else( return true; ) )

Chúng tôi lưu tài liệu, mở nó trong trình duyệt và kiểm tra nó.


Bằng cách này, bạn có thể kiểm tra biểu mẫu bằng JavaScript và hủy việc gửi biểu mẫu trong trường hợp có lỗi.

Thôi, chỉ vậy thôi quý độc giả thân mến. Hãy tóm tắt.
Các sự kiện được sử dụng rất thường xuyên, vì vậy bạn phải có khả năng làm việc với chúng 100%.

Trong bài viết này bạn đã tìm hiểu sự kiện và trình xử lý sự kiện là gì. Bạn đã học cách lấy các giá trị thuộc tính phần tử cũng như cách tìm chiều rộng và chiều cao của một phần tử. Bạn cũng đã học cách thực hiện xác thực biểu mẫu.

Nhiệm vụ
  • Tạo một máy tính cộng số đơn giản.
    • Tạo biểu mẫu có hai trường số (loại="số") để nhập số và nút có nhãn "Thêm"
    • Khi bạn nhấp vào nút gửi, hãy gọi hàm để xử lý sự kiện này.
    • Bên trong hàm, lấy các giá trị trường và sử dụng phương thức cảnh báo, hiển thị kết quả cộng các số đã nhập.
    • Đảm bảo rằng biểu mẫu không được gửi sau khi nhấp vào nút.
  • onClick là sự kiện số 1 trên màn hình của người dùng.
    onСlick là một cú nhấp chuột (hoặc nhấp chuột) của người dùng vào một đối tượng.
    Sau khi mỗi người dùng nhấp chuột như vậy, một hành động phản hồi sẽ xuất hiện trên màn hình. Điều này đạt được tính tương tác của giao diện và xác nhận nguyên tắc giao tiếp chính giữa máy tính và con người - nhấp chuột, trả lời, nhấp chuột, trả lời.
    Theo thuật ngữ của người dùng, sự kiện onСclick có thể được gọi là bất kỳ tên nào bạn thích. Ngay khi người dùng thông thường không gọi điều này là onСclick kém - nhấp, kéo, nhấp, nhấp, đập, v.v. ... Nhưng bản chất của điều này không thay đổi trong nhiều năm - nếu người dùng đang hoạt động trên màn hình và nhấp vào một đối tượng, thì máy tính phải phản hồi đầy đủ cho anh ta (người dùng). Đây là trên Click.

    onclick trong HTML

    Sự kiện onClick có tầm quan trọng tối cao trong bất kỳ ngôn ngữ nào. Và HTML cũng không ngoại lệ. Nó được biết đến. Thật vậy, nếu sau khi nhấp (onClick) vào một phần tử thì không có gì xảy ra trong trình duyệt, thì tại sao lại phải bận tâm đến việc lập trình bất cứ thứ gì trên trang web? Vì vậy, onСlick là vị khách được chào đón trên bất kỳ màn hình Internet nào (hoặc màn hình nhỏ).
    Bây giờ, gần hơn với chủ đề. Cụ thể hơn, trang onClick trên trang web trong trình duyệt của chúng tôi là một sự kiện từ tập lệnh Java, trong đó HTML chỉ đóng vai trò làm khung để đặt mã cho các cấu trúc của nó. Và, từ quan điểm về tính hợp lệ của mã của chính HTML này, sẽ đúng khi viết onclick chứ không phải onСlick (như nhiều lập trình viên ứng dụng đã quen). Bởi vì trong HTML tất cả các thẻ và cấu trúc chỉ được viết bằng chữ thường.

    Không có chữ hoa trong HTML. Không, đó là tất cả! Và đối với những “kẻ ác” viết bằng chữ hoa HTML, ngày xưa người ta có phong tục chặt tay đến tận đầu gối. Hơn thế nữa. Họ nói rằng dưới thời Cha Sa hoàng Ivan Bạo chúa, vì viết bằng HTML, một thứ như thế này có thể dễ dàng đưa bạn đến giá treo cổ, nếu không bị đóng cọc. Điều này hoàn toàn chính xác. Đương nhiên lúc này triều thần và người cai trị đã trở nên bình tĩnh hơn. Tuy nhiên, khi viết bất kỳ mã nào, bạn cần phải quan sát ít nhất vẻ bề ngoài lịch sự. Từ nơi này câu chuyện về onclick chính xác bắt đầu.

    Vì vậy, nó đã được quyết định và chứng minh (đối với HTML).
    Trước hết, chúng tôi viết onclick chứ không phải onСclick!!!

    Thực đơn số 1
    hoặc
    Thực đơn số 1

    Chúng ta sẽ tìm hiểu ý nghĩa của những dòng điên rồ này sau, nhưng bây giờ...
    - Về cơ bản, sự kiện onclick từ tập lệnh Java trong HTML có thể được đính kèm vào bất kỳ thành phần mã nào của trang HTML, có thể là ,

    Hoặc . Trình duyệt sẽ “nuốt chửng” mọi thứ và mọi thứ sẽ hoạt động. Điều duy nhất là chỉ có thể truy cập vào một phần tử từ bàn phím đối với đối tượng liên kết hoặc nút. Và, nếu chúng ta giả sử trong giây lát rằng người dùng không có chuột và chỉ làm việc bằng bàn phím, thì tất cả những gì anh ta có thể chạm vào trên trang web sẽ chỉ là các nút hoặc liên kết. Không có thứ ba! Do đó, việc “gắn” sự kiện onclick vào các đối tượng không thể truy cập được từ bàn phím đơn giản là xấu. Chà, không phải con người, bằng cách nào đó. Điều này đưa ra quy tắc thứ hai cho onclick trong HTML - sự kiện này chỉ cần được kết nối với một liên kết (thẻ “a”) hoặc một nút (thẻ “nút”). Nếu không, mã vẫn sẽ hoạt động, nhưng chết tiệt, một chiếc chảo rán lớn riêng biệt đã được chuẩn bị cho những lập trình viên như vậy.
    Vì việc định dạng (trong HTML) và làm việc với các nút (“ổ bánh”) gây ra một số khó khăn nhất định, nên cách duy nhất, phổ quát và sự lựa chọn tốt nhất chỉ còn lại liên kết (thẻ “a”). Nhưng ngay cả với thẻ này, không phải mọi thứ đều suôn sẻ như vậy. Bây giờ, hãy quay lại phân tích với dòng mã của chúng tôi:

    Thực đơn số 1

    Chúng tôi loại bỏ các liên kết tiêu đề khỏi cuộc thảo luận như một điều hoàn toàn hiển nhiên. Nó vẫn còn
    Thực đơn số 1
    Tất cả các bài viết tiếp theo sẽ liên quan đến chủ đề chặn thuộc tính href, thuộc tính này cần được “tê liệt” đúng cách để liên kết không còn là liên kết hoạt động nhưng vẫn thực hiện các chức năng của onclick .

    trả về sai;

    trả về sai; - Đây là cách chặn trực tiếp thuộc tính href. Nếu người dùng đã bật tập lệnh Java trong trình duyệt thì sự kiện onclick sẽ được gọi từ tập lệnh tương ứng, thay vì theo liên kết. Nghĩa là, để khi bạn nhấp vào “liên kết cuộc gọi”, không có sự chuyển đổi ngay lập tức sang địa chỉ từ href, sự kiện return false sẽ được thêm vào onclick; và giả định rằng một hàm sẽ được thực thi trước tiên sẽ hủy liên kết nếu bật javascript. Vì vậy, nội dung của thuộc tính href không có ý nghĩa gì vì nó bị bỏ qua khi tập lệnh java được thực thi.

    Nhưng đây là một câu hỏi. Điều gì xảy ra nếu người dùng đã tắt (tắt) tập lệnh Java trong trình duyệt của mình? Liên kết của chúng tôi sẽ hoạt động như thế nào sau đó? Tôi sẽ không làm bạn tò mò nhưng tôi sẽ đăng nó ngay những lựa chọn khả thi sự phát triển của các sự kiện - các giá trị có thể có của thuộc tính href và hành vi tương ứng của trình duyệt sau khi nhấp vào liên kết như vậy khi tập lệnh Java bị tắt.
    Tất nhiên, nếu javascript bị tắt trong trình duyệt của người dùng thì đây là một vấn đề và gây phiền toái. Nếu việc thực thi các tập lệnh Java bị vô hiệu hóa (bị cấm) trong trình duyệt của người dùng thì các vấn đề liên tục sẽ bắt đầu với thuộc tính href, vì thẻ “a” vẫn là một liên kết và trình duyệt sẽ cố gắng điều hướng đến nó.

    Bạn không thể xóa hoàn toàn thuộc tính href khỏi liên kết. Không thể thực hiện được nếu không có thuộc tính href trong văn bản liên kết và bất kỳ người xác thực nào cũng sẽ ngay lập tức cảm thấy bị xúc phạm vì hành vi xúc phạm cơ thể mỏng manh và cay nghiệt của cô ấy. Điều này có nghĩa là chỉ còn một tùy chọn - điền nội dung dễ hiểu vào thuộc tính href. Ở đây có thể thực hiện những điều sau: để trống hoàn toàn href, điền vào đó bằng dấu “#” sắc nét hoặc biểu thức javascript://. Khi tập lệnh Java bị tắt (hoặc bị trục trặc), sau khi nhấp vào các liên kết đó, điều sau đây sẽ xảy ra:

    Kiểm tra Thuộc tính href trống. Sau khi nhấp vào liên kết như vậy, trang trong trình duyệt sẽ chỉ tải lại. Mẫu Thuộc tính href có giá trị "#". Sau khi nhấp vào liên kết như vậy, người dùng sẽ được đưa lên đầu trang mà không cần tải lại. Thử Thuộc tính href có giá trị "javascript://". Sau khi nhấp vào liên kết như vậy, sẽ không có gì xảy ra. href="javascript://" - việc nhấp vào liên kết sẽ bị trình duyệt bỏ qua. Giá trị "javascript://" cho thuộc tính href là "sơ khai" tiêu chuẩn để chặn một liên kết khi tập lệnh Java bị tắt.

    href="javascript://" - nhảm nhí!

    Tại sao nhảm nhí? Bởi vì, cuộc sống Internet trên thế giới công cụ tìm kiếm thực hiện những điều chỉnh của riêng mình. Từ quan điểm chính xác và ngữ nghĩa! bố cục, sẽ hoàn toàn hợp lý nếu viết một liên kết thực trong thuộc tính href và thêm tiêu đề thực cho liên kết này. Sau đó, sau khi nhấp vào liên kết như vậy, một trong hai điều sẽ xảy ra: sự kiện onclick từ tập lệnh Java tương ứng sẽ được thực thi hoặc quá trình chuyển đổi sẽ diễn ra thông qua liên kết thực tới trang thật, (nếu tập lệnh Java bị vô hiệu hóa hoặc bị trục trặc/không tải được).

    Vì vậy, hãy tóm tắt. Trong liên kết gọi sự kiện tập lệnh Java, trong href chúng tôi đặt một liên kết thực đến trang thực để điều hướng đến khi tắt javascript và trong onclick - một hàm gọi yêu cầu thực thi tập lệnh khi tập lệnh Java được bật .

    Nói cách khác, “href” phải chứa một liên kết hoàn toàn bình thường và đang hoạt động tới bất kỳ trang web nào mà người dùng sẽ được chuyển hướng đến đó khi nhấp vào “liên kết cuộc gọi sự kiện” tắt Tập lệnh Java và tập lệnh này sẽ bị tập lệnh bỏ qua khi bao gồm Kịch bản Java. Đó là tất cả …

    Chà, cuối cùng thì -

    Kiểm tra trình duyệt để bật/tắt tập lệnh Java

    Mã tiêu chuẩn cho việc kiểm tra như vậy trông như thế này:
    Bạn đã tắt javascript...
    Ở đâu, bạn có thể viết bất kỳ kiểu nào trong CSS, ngoại trừ display:none; và các phong cách tương tự... Trình duyệt là PHẢI!!! sẽ hiển thị thông báo này trên màn hình nếu người dùng tắt tập lệnh Java trong trình duyệt của mình. Bằng cách đơn giản này, Webmaster thường viết: “Xin hãy bật javascript” hoặc hiển thị một số những hình ảnh đẹp với một yêu cầu tương tự hoặc điều gì đó khác... Bên trong thẻ bản ghi chép Bạn có thể đặt bất kỳ thẻ HTML nào. Và đây không phải là một biện pháp phòng ngừa không cần thiết. Mặc dù thực tế là hiện nay không dễ để tìm được một trang web hoàn toàn không sử dụng javascript.

    Ai không ở bên chúng ta là chống lại chúng ta
    Nói chung, vấn đề với tập lệnh Java bị tắt trong trình duyệt có thể được giải quyết một cách triệt để và triệt để. Ví dụ: thêm mã HTML5 bên trong phần này, như:




    trong đó, http://mysite.ru/ là một trang web được chuyển hướng ngay lập tức tới đó
    người dùng khi tắt trong trình duyệt Kịch bản Java.

    Xin chào tất cả những ai muốn hiểu chức năng của onclick(). Bài viết hôm nay sẽ giúp bạn hiểu rõ hơn về nguyên lý hoạt động. của trình xử lý này sự kiện và sắp xếp ví dụ cụ thể onclick JavaScript, hay đúng hơn là các ví dụ.

    Tôi sẽ chỉ cho bạn một số cách để làm việc với công cụ này, giải thích những ưu điểm và nhược điểm của chúng, đồng thời mô tả công việc jQuery với các sự kiện. Bây giờ hãy chuyển sang phân tích tài liệu!

    Chỉ định trình xử lý sự kiện

    Đầu tiên, chúng ta hãy nhìn vào phần lý thuyết của câu hỏi. Hầu hết mọi người đều xử lý tập lệnh trên trang của họ. Và thường đây là những sự kiện khác nhau. Để tất cả các sự kiện được lập trình này có thể kích hoạt, bạn phải cài đặt một trình xử lý cho chúng.

    Theo quy tắc viết, tất cả các trình xử lý đều bao gồm “on+tên sự kiện” trong tên của chúng, điều này được quan sát thấy trong onclick(). Tùy thuộc vào sự kiện đã chọn, quá trình xử lý sẽ diễn ra do hành động khác nhau. Trong trường hợp của chúng tôi, khi sử dụng onclick(), chỉ những sự kiện do nhấp chuột trái gây ra mới được thực thi.

    Các cách khác nhau để chỉ định trình xử lý sự kiện

    Ngày nay, có một số tùy chọn để đưa trình xử lý cho các sự kiện hoặc sự kiện nhất định vào mã.

    Sử dụng sự kiện đơn giản

    Hãy bắt đầu với tùy chọn đơn giản, bao gồm việc nhúng onclick() vào phần đánh dấu của chính tài liệu html. Nó trông như thế này:

    Như bạn có thể thấy, khi bạn nhấp vào nút bằng chuột trái, thông báo “Click-click!” sẽ xuất hiện. Tôi muốn thu hút sự chú ý của bạn đến một chi tiết nhỏ nhưng quan trọng. Bạn chỉ có thể sử dụng dấu ngoặc đơn ('') bên trong cảnh báo.

    cũng ở trong trường hợp này có thể được sử dụng từ khóa cái này. Nó đề cập đến phần tử hiện tại và cung cấp tất cả các phương thức có sẵn cho nó.

    Nhấp vào tôi

    Dòng mã này tạo ra một nút có nội dung "Nhấp vào tôi". Sau khi nhấn, bạn sẽ thấy thông báo trên màn hình: ““Nhấn!” Nó sẽ thay thế tên đầu tiên của nút.

    Phương pháp này chắc chắn là rất đơn giản. Tuy nhiên, nó chỉ phù hợp cho các nhiệm vụ tương tự, tức là. hiển thị thông báo hoặc thực hiện các lệnh đơn giản.

    Nếu cần sử dụng cấu trúc tuần hoàn, sử dụng thẻ, v.v., thì phương pháp này không phù hợp. Nó sẽ làm giảm khả năng đọc của mã và cũng làm cho mã trở nên cồng kềnh và cẩu thả.

    Trong trường hợp này, bạn nên sử dụng hàm.

    Làm việc với các hàm

    Chức năng cho phép bạn tách mã yêu cầu thành một khối riêng biệt, sau này có thể được gọi thông qua trình xử lý sự kiện trong .

    Ví dụ: tôi đã đính kèm một ứng dụng để hiển thị cho người dùng số kết quả có lũy thừa khác nhau, bắt đầu từ số 1 và kết thúc bằng số 5. Để làm điều này, tôi đã tạo một hàm countPow(), hàm này có thể truyền tham số. Trong ứng dụng của tôi, người dùng phải nhập một số làm biến hàm.

    Như vậy, thông qua trình xử lý liên quan đến hàm nêu trên, các phép tính được thực hiện và hiển thị trên màn hình.

    kết quả var =1; hàm countPow(n) ( for(var i=1; i