ลิงก์สมอ HTML - href และ onclick ทั้งสอง?


93

ฉันต้องการสร้างจุดยึดแท็กที่เรียกใช้ JavaScript บางส่วนจากนั้นดำเนินการต่อไปทุกที่ที่hrefใช้ การเรียกใช้ฟังก์ชันที่เรียกใช้งาน JavaScript ของฉันแล้วตั้งค่าwindow.locationหรือtop.locationไปยังhrefตำแหน่งนั้นไม่ได้ผลสำหรับฉัน

ลองนึกภาพว่าฉันมีองค์ประกอบที่มี id "Foo" อยู่บนหน้า ฉันต้องการเขียนจุดยึดที่คล้ายกับ:

<a href="#Foo" onclick="runMyFunction(); return false;">Do it!</a>

เมื่อคลิกสิ่งนี้ฉันต้องการเรียกใช้ runMyFunction จากนั้นข้ามหน้าไปที่#Foo(ไม่ทำให้เกิดการโหลดซ้ำ - การใช้top.locationจะทำให้โหลดหน้าซ้ำ)

ข้อเสนอแนะ? ฉันยินดีที่จะใช้ jQuery หากสามารถช่วยได้ที่นี่ ...


return true;เป็นทางออก แต่คุณสามารถโทรlocation.hash = '#Foo'. มันจะไม่โหลดหน้าซ้ำ
shuangwhywhy

คำตอบ:


135

เพียงแค่return trueแทน?

ค่าส่งคืนจากonClickโค้ดคือสิ่งที่กำหนดว่าการดำเนินการคลิกโดยธรรมชาติของลิงก์ได้รับการประมวลผลหรือไม่ - การส่งคืนfalseหมายความว่าไม่ได้รับการประมวลผล แต่ถ้าคุณกลับมาtrueเบราว์เซอร์จะดำเนินการประมวลผลหลังจากฟังก์ชันของคุณกลับมาและไปที่เหมาะสม สมอ.


1
จะเกิดอะไรขึ้นถ้า onclick ไม่ส่งคืนอะไรเลย?
maciek

1
@maciek จากนั้นค่าที่ส่งคืนจะถูกถือว่าเป็นundefinedเท็จสำหรับวัตถุประสงค์เหล่านี้
แอมเบอร์

1
ในอดีตเมื่อใดก็ตามที่ฉันใช้ฟังก์ชัน js เพื่อเปิดหน้าใหม่และใส่เพียง "#" สำหรับแอตทริบิวต์ href ฉันจะส่งคืน "-1" เพื่อป้องกันการทำงานเริ่มต้นซึ่งโดยปกติเบราว์เซอร์จะกระโดด เขาอยู่บนสุดของหน้าหรือบางครั้งฉันก็ไม่ส่งคืนอะไรเลย เมื่อเร็ว ๆ นี้ฉันต้องแก้ไขหน้าเหล่านั้นทั้งหมดตามที่ @Amber แนะนำ ... เพื่อส่งคืนเท็จโดยเฉพาะหากฉันไม่ต้องการให้หน้ากระโดด
Randy

2
@Amber ดูเหมือนว่าถ้า onclick ไม่ส่งคืนอะไรเลยการดำเนินการที่คลิกโดยธรรมชาติของลิงก์จะถูกประมวลผล
iplus26

นอกจากนี้คุณไม่ควรใช้ event.preventDefault () ในตัวจัดการเหตุการณ์คลิก
Ruben

36
<a href="#Foo" onclick="return runMyFunction();">Do it!</a>

และ

function runMyFunction() {
  //code
  return true;
}

ด้วยวิธีนี้คุณจะเรียกใช้ฟังก์ชัน youf และคุณจะไปตามลิงค์และคุณจะไปตามลิงค์หลังจากเรียกใช้ฟังก์ชันของคุณสำเร็จแล้ว


1
ดูเหมือนจะไม่ทำงานหากฟังก์ชันของคุณส่งคืนเป็นจริงหลังจากการเรียกใช้ฟังก์ชันรอการตัดบัญชี?
DavidVdd

7

หากลิงก์ควรเปลี่ยนตำแหน่งหากการเรียกใช้ฟังก์ชันสำเร็จให้ทำonclick="return runMyFunction();"และในฟังก์ชันคุณจะส่งคืนจริงหรือเท็จ

หากคุณเพียงแค่ต้องการเรียกใช้ฟังก์ชันจากนั้นปล่อยให้แท็กจุดยึดทำงานเพียงแค่ลบreturn falseคำสั่งนั้นออก

โปรดทราบว่าคุณควรใช้ตัวจัดการเหตุการณ์แทนเนื่องจาก JS แบบอินไลน์ไม่ใช่วิธีที่ดีที่สุดในการทำสิ่งต่างๆ


0

เมื่อสร้างโครงสร้าง HTML ใหม่ทั้งหมดคุณสามารถใช้สิ่งนี้ได้

//Jquery Code
$('a#link_1').click(function(e){
  e . preventDefault () ;
  var a = e . target ;
  window . open ( '_top' , a . getAttribute ('href') ) ;
});

//Normal Code
element = document . getElementById ( 'link_1' ) ;
element . onClick = function (e) {
  e . preventDefault () ;
  
  window . open ( '_top' , element . getAttribute ('href') ) ;
} ;
<a href="#Foo" id="link_1">Do it!</a>

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