2009-09-29 37 views
5

Khi cố gắng gỡ lỗi nội dung đang được gửi, tôi đã viết nội dung này.<form action = "javascript: alert (this);"> "this" là gì?

<form action="javascript:alert(this);" 
  1. Có thể cảnh báo những gì đang được gửi?
  2. Ở đây "cái này" biểu thị cái gì?

Tôi nhận đối tượng trong hộp cảnh báo & không thể quyết định bất kỳ điều gì trong số đó. :-)

+1

Bạn có thể nhận thêm thông tin với bảng điều khiển.dir() trong Firebug (Firefox extension) hoặc Web Inspector (công cụ phát triển Safari/Chrome). – eyelidlessness

+0

Ngoài ra, hãy thử thực hiện "alert (this.innerHTML)" –

Trả lời

7

Trong ví dụ của bạn this là đối tượng window toàn cầu. Hãy tự thử:

<form action="javascript:alert(typeof this.setTimeout);"> 

kết quả là "function" (tức là chức năng toàn cầu). Hoặc thử:

<form action="javascript:alert(this.nodeType);"> 

kết quả trong undefined (ví dụ: nó không trỏ đến phần tử form) *.

Giá trị của "this" bên trong một thuộc tính sẽ chỉ là một trong hai điều:

  1. đối tượng window toàn cầu
  2. các yếu tố tự

Thời gian duy nhất this điểm để các phần tử chính nó là khi nó được sử dụng bên trong một intrinsic event attribute (các giá trị được bắt đầu bằng "on", ví dụ: "onclick", "onload", v.v.) Các thuộc tính này là đặc biệt: các phạm vi của trình duyệt this đối với phần tử sự kiện đang kích hoạt và tạo đối tượng event (với tên đó) cũng có sẵn bên trong thuộc tính.

Nếu thuộc tính là không một trong những sự kiện nội tại, "this" sẽ là đối tượng window toàn cầu.


Chú thích:

* tất nhiên trừ khi bạn xảy ra để có một var toàn cầu mang tên "nodeType"

0

this khi được sử dụng trong JavaScript trong thuộc tính của phần tử HTML là tham chiếu của chính phần tử đó. Vì vậy, this trong ngữ cảnh của biểu mẫu của bạn là đối tượng DOM biểu mẫu DOM.

Nói cách khác, một sử dụng khá tiện dụng của các từ khóa :)

+2

Không, từ khóa 'this' trỏ đến phần tử chỉ cho các thuộc tính sự kiện nội tại (ví dụ:" onfoo "'). –

2
<form action="javascript:alert(this === window);"> 
<input type="submit" value="Submit"> 
</form> 

bật lên "true" khi bạn bấm vào nút "Gửi". Đó là đối tượng cửa sổ. Một tham chiếu có thể có liên quan: https://developer.mozilla.org/en/DOM/element.addEventListener - xem phần bên dưới "Giá trị của điều này trong trình xử lý".

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