"นี่" ใน JavaScript onclick คืออะไร


115
<a onclick="javascript:func(this)" >here</a>

อะไรthisหมายถึงในสคริปต์?


4
@ JMCF125 เขาจัดการเพื่อประโยชน์ต่อไป ฉัน Googled เกี่ยวกับวิธีรับองค์ประกอบที่ถูกคลิกในเหตุการณ์ onclick และลงเอยที่นี่ซึ่งฉันพบคำตอบ
ทิ้งบัญชี

javascript: ทำอะไร? ทำไมไม่เป็นแบบนี้ <a onclick="func(this)" >here</a>
J3STER

1
@ J3STER คำนำหน้า "javascript:" ไม่ถูกต้องใน onclick คุณสามารถหาคำอธิบายในคำตอบทิมลงด้านล่าง
Mariano Desanze

คำตอบ:


97

ในกรณีที่คุณกำลังถามเกี่ยวกับthisแสดงถึงองค์ประกอบ HTML DOM

มันจะเป็น<a>องค์ประกอบที่ถูกคลิก


5
ใครช่วยโยงสเป็คหน่อย การมองอย่างไร้เดียงสาที่w3.org/TR/DOM-Level-3-Eventsนั้นไร้ผล
Ciro Santilli 郝海东冠状病六四事件法轮功

34

มันหมายถึงองค์ประกอบในDOMซึ่งonclickเป็นของแอตทริบิวต์:

<script type="text/javascript"
        src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js">
</script>
<script type="text/javascript">
function func(e) {
  $(e).text('there');
}
</script>
<a onclick="func(this)">here</a>

(ตัวอย่างนี้ใช้jQuery )


22

ค่าของแอตทริบิวต์ตัวจัดการเหตุการณ์เช่น onclick ควรเป็น JavaScript โดยไม่มีคำนำหน้า "javascript:" javascript: pseudo-protocol ใช้ใน URL ตัวอย่างเช่น:

<a href="javascript:func(this)">here</a>

คุณควรใช้onclick="func(this)"แบบฟอร์มนี้ตามต้องการ โปรดทราบว่าในตัวอย่างของฉันข้างต้นโดยใช้ javascript: pseudo-protocol "this" จะอ้างถึงวัตถุหน้าต่างแทนที่จะเป็น<a>องค์ประกอบ


1
การโหวตลงคะแนนที่น่าสนใจแม้ว่าฉันคิดว่าการพูดอย่างเคร่งครัดคำตอบนี้เป็นเพียงคำแนะนำเกี่ยวกับคำถามแทนที่จะตอบคำถามโดยตรง
ทิมลง

ใช่ ... คุณไม่ได้ตอบคำถามจริงๆ: - / ไม่มีอะไรเป็นส่วนตัว!
Dave

1
@ เดฟ: พอใช้ เมื่อถึงเวลาที่ฉันเขียนสิ่งนี้คำถามหลักก็ได้รับคำตอบแล้ว คำตอบของฉันน่าจะเป็นความคิดเห็น แต่ฉันสงสัยว่าฉันอาจไม่มีตัวแทนเพียงพอที่จะเพิ่มความคิดเห็นในเวลานั้น ใช้ชีวิตและเรียนรู้
Tim Down

8
ตัวแทนไม่เพียงพอในเวลานั้น? พ่นไวน์ของเขา
โจนาธาน

5

ใน JavaScript thisหมายถึงองค์ประกอบที่มีการดำเนินการ ตัวอย่างเช่นหากคุณมีฟังก์ชันที่เรียกว่าhide():

function hide(element){
   element.style.display = 'none';
}

การโทรhideด้วยthisจะซ่อนองค์ประกอบ จะส่งคืนเฉพาะองค์ประกอบที่คลิกแม้ว่าจะคล้ายกับองค์ประกอบอื่น ๆ ใน DOM ก็ตาม

ตัวอย่างเช่นคุณอาจthisคลิกตัวเลขใน HTML ด้านล่างจะซ่อนเฉพาะสัญลักษณ์แสดงหัวข้อย่อยที่คลิกเท่านั้น

<ul>
  <li class="bullet" onclick="hide(this);">1</li>
  <li class="bullet" onclick="hide(this);">2</li>
  <li class="bullet" onclick="hide(this);">3</li>
  <li class="bullet" onclick="hide(this);">4</li>
</ul>

4

ที่นี่ (นี่) คือวัตถุที่มีคุณสมบัติ / คุณสมบัติทั้งหมดขององค์ประกอบ dom คุณสามารถดูได้โดย

console.log(this);

สิ่งนี้จะแสดงคุณสมบัติแอตทริบิวต์ทั้งหมดขององค์ประกอบ dom ที่มีลำดับชั้น คุณสามารถจัดการองค์ประกอบ dom ได้โดยสิ่งนี้

อธิบายในลิงค์ด้านล่าง: -

http://www.quirksmode.org/js/this.html


3

คีย์เวิร์ดนี้ในเหตุการณ์addEventListener

function getValue(o) {
  alert(o.innerHTML);
}

function hide(current) {
  current.setAttribute("style", "display: none");
}

var bullet = document.querySelectorAll(".bullet");

for (var x in bullet) { 
  bullet[x].onclick = function() {
    hide(this);
  };
};
 
/* Using dynamic DOM Event */
document.querySelector("#li").addEventListener("click", function() {
  getValue(this); /* this = document.querySelector("#li") Object */
});
li {
  cursor: pointer;
}
<ul>
  <li onclick="getValue(this);">A</li>
  <li id="li" >B</li>
  <hr />
  <li class="bullet" >1</li>
  <li class="bullet" >2</li>
  <li class="bullet" >3</li>
  <li class="bullet" >4</li>
</ul>


2

เมื่อเรียกใช้ฟังก์ชันคำว่า "this" เป็นการอ้างอิงถึงวัตถุที่เรียกฟังก์ชัน

ในตัวอย่างของคุณเป็นการอ้างอิงถึงองค์ประกอบจุดยึด ในอีกด้านหนึ่งการเรียกใช้ฟังก์ชันจะเข้าถึงตัวแปรสมาชิกขององค์ประกอบผ่านพารามิเตอร์ที่ถูกส่งผ่าน


1

thisอ้างอิงถึงวัตถุที่onclickเมธอดเป็นของ ดังนั้นภายในfunc thisจะเป็นโหนด DOM ของaองค์ประกอบและจะเป็นthis.innerTexthere

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.