2013-06-05 69 views
9

what is the difference betweensự khác biệt giữa <a onclick="someFunction"> and <a onclick="someFunction()">

<a onclick="someFunction">

and

<a onclick="someFunction()">

One uses the parenthesis and not the other, but what are the differences of using either? What is the "correct" option? And what happens if i dont use any href attribute?

As far as I know, in javascript, using something = someFunc(); assigns the return value of that function to the something variable. And using something = someFunc; assigns the function directly (not its result) to that variable (And it's mostly used to assign functions to events). e.g. I can assign a function to a onclick event.

But what I don't understand is what happens when using either in some html element inline event, as in the examples, since the assignation is not to a javascript variable, but to an html attribute, which happens to be an event? Please explain.

And also, is there a difference on assigning a inline onclick function to an anchor (a) that to other elements (e.g. span div label etc)? Do they have the same effect?

Sidenote: I've been reading here về cách chạy một hàm khi nhấp vào liên kết và tôi đã hiểu là không phải là được thực hiện "nội tuyến", mà thay vào đó là sử dụng javascript không phô trương. (Tôi đề cập đến nó để tránh tranh luận về điều đó), nhưng trong các ví dụ tôi đã thấy họ không đề cập đến sự khác biệt của cả hai tùy chọn tôi đề cập đến khi làm nó nội tuyến.

Chỉnh sửa: Câu hỏi này được thực hiện vì here họ đưa ra câu trả lời không sử dụng dấu ngoặc đơn trong hàm cho sự kiện và không ai đề cập đến dấu ngoặc đơn, vì vậy tôi cho rằng nó hợp lệ. nhưng tôi không biết sự khác biệt của việc sử dụng () hay không.

+0

'Tùy chọn" chính xác "là gì?' Không, sử dụng ['node.addEventListener'] (https://developer.mozilla.org/en-US/docs/Web/API/EventTarget.addEventListener) –

Trả lời

4

Một sử dụng dấu ngoặc đơn chứ không phải dấu ngoặc đơn khác, nhưng sự khác biệt của việc sử dụng dấu ngoặc đơn là gì?

<a onclick="someFunction"> sẽ không làm gì cả. Dấu ngoặc đơn gây ra một hàm là được gọi là.

Có tuyên bố không có gì ngoài mã định danh (có thể là tên hàm, biến hoặc bất kỳ thứ gì) sẽ không làm bất kỳ điều gì (ngoại trừ ném lỗi tham chiếu nếu biến không tồn tại).

Và điều gì sẽ xảy ra nếu tôi không sử dụng bất kỳ thuộc tính href nào?

Sau đó, tôi muốn hỏi tại sao bạn sử dụng yếu tố <a> ở vị trí đầu tiên.

Ngoài ra, có sự khác biệt khi gán hàm onclick nội tuyến cho neo (a) cho các phần tử khác (ví dụ: nhãn div div ...) không?

Chỉ rằng chúng không phải (theo mặc định) các phần tử có thể đặt tiêu điểm (cũng không phải là phần tử không có thuộc tính href), do đó không thể kích hoạt sự kiện nhấp bằng cách bấm tab vào phần tử và nhấn enter. Nếu bạn muốn một phần tử sẽ làm điều gì đó với JS khi được kích hoạt và bạn không có một dự phòng hợp lý nào khi JS không có sẵn, hãy sử dụng một nút.

+0

vì vậy, nếu không sử dụng parethesis là "sai" (vì nó sẽ không làm bất cứ điều gì) có nghĩa là câu trả lời được chấp nhận [ở đây] (http://stackoverflow.com/questions/688196/how-to-use-a-link -to-call-javascript) đơn giản là sai? (câu trả lời đó là preciselly một trong đó làm cho tôi thực hiện câu hỏi của tôi, nhưng không tìm thấy liên kết trước, tôi sẽ chỉnh sửa câu hỏi của tôi ở đây để phản ánh điều đó) – DiegoDD

+0

@ DiegoDD tôi nghĩ rằng 'jsFunction' có nghĩa là' myFunction() 'thay vì tên của nó. –

+0

@DiegoDD - Nó được thể hiện rõ ràng. Nó có thể có nghĩa là "Cơ thể của định nghĩa hàm" khi nó nói "jsfunction". Tuy nhiên, không sử dụng thuộc tính 'onclick', tuân theo các nguyên tắc của [Tăng cường nâng cao] (http://en.wikipedia.org/wiki/Progressive_enhancement) và [JavaScript không phô trương] (http://en.wikipedia.org/ wiki/Unobtrusive_JavaScript). Liên kết trình xử lý sự kiện của bạn với 'addEventListerner' hoặc thư viện tóm tắt nó để tương thích với các trình duyệt cũ. – Quentin

1

Giá trị của thuộc tính trình xử lý sự kiện là một chuỗi các câu lệnh Javascript , không phải là một biểu thức.

Nó không chỉ định giá trị hàm cho thuộc tính; đó là một đoạn mã để thực thi tại sự kiện đó.
Rời khỏi dấu ngoặc đơn, dẫn đến câu lệnh biểu thức không có hiệu lực.

+0

Tại sao điều này lại bị giảm? – SLaks

+0

Bạn có thể vui lòng chú ý hơn với sự khác biệt giữa một câu lệnh và một biểu thức? – DiegoDD

+0

@DiegoDD: Tuyên bố là một "dòng" hoàn chỉnh có thể thực thi của mã. Biểu thức là một đoạn mã duy nhất có giá trị. – SLaks

1

khi viết nội tuyến trên các hàm nhấp chuột, chúng tôi chỉ định mã sẽ được thực thi dưới dạng chuỗi khi nhấp vào phần tử.

Nó tương đương với eval ('someFunction()'); chúng tôi không thể viết trên nhấp chuột = 'someFunction' vì nó sẽ tương đương với eval ('someFunction') mà sẽ không làm gì cả. nếu bạn định ràng buộc trình xử lý nhấp chuột vào thẻ neo, đừng quên thêm thuộc tính a href = '#' vào thẻ neo.

Không có sự khác biệt giữa việc chỉ định trình xử lý nhấp chuột cho span hoặc div so với thẻ liên kết.

Các vấn đề liên quan