เรียกใช้ฟังก์ชันจาวาสคริปต์เมื่อคลิกไฮเปอร์ลิงก์


93

ฉันกำลังสร้างไฮเปอร์ลิงก์แบบไดนามิกในโค้ด c # หลังไฟล์ ASP.NET ฉันต้องการเรียกใช้ฟังก์ชัน JavaScript เมื่อคลิกไคลเอนต์ ฉันจะทำสิ่งนี้ให้สำเร็จได้อย่างไร


อาจซ้ำกันได้ของHow To Use A Link To Call Javascript?
Trilarion

คำตอบ:


135

นิ่งเฉยแทนที่จะเป็นtypical href="#"หรือhref="javascript:void"หรือhref="whatever"ฉันคิดว่านี่สมเหตุสมผลกว่ามาก:

var el = document.getElementById('foo');
el.onclick = showFoo;


function showFoo() {
  alert('I am foo!');
  return false;
}

<a href="no-javascript.html" title="Get some foo!" id="foo">Show me some foo</a>

หาก Javascript ล้มเหลวมีข้อเสนอแนะบางประการ นอกจากนี้พฤติกรรมที่เอาแน่เอานอนไม่ได้ (การกระโดดหน้าในกรณีhref="#"ไปที่หน้าเดียวกันในกรณีของhref="") จะถูกตัดออก


13
+1 นี่เป็นคำตอบเดียวที่ไม่สร้างความรำคาญ +100 ถ้าฉันทำได้
James

@Lewis ใช่แท็ก <a> ตามหลักการแล้วจะไม่ถูกใช้สำหรับการโทร js แท้ ๆ แต่น่าเสียดายที่เบราว์เซอร์รุ่นเก่าไม่รองรับ: วางเมาส์เหนือองค์ประกอบที่ไม่ใช่ลิงก์ ดังนั้นลิงก์จึงมักใช้เพื่อทริกเกอร์เหตุการณ์ js
Chris Van Opstal

@ คริส - ฉันไม่แน่ใจว่าคุณจะเข้าใจคริสของฉัน ฉันขอแนะนำว่าอย่าใช้ <a href="#"> ไม่ต้องทำอะไร </a> และใช้ <a href="a/link/somwhere.html"> ทำบางอย่าง </a> แทนจากนั้นใช้ การเพิ่มประสิทธิภาพแบบก้าวหน้าเพื่อแทนที่ href นี่คือทางออกที่สะอาดที่สุด จุดยึดนั้นใช้ได้ แต่ควรทำบางสิ่งบางอย่างหากจาวาสคริปต์ถูกปิดใช้งาน - หรือด้วยเหตุผลบางประการ (ตาม IE6) จาวาสคริปต์บางตัวพังก่อนที่ตัวจัดการจะถูกสร้างและมอบหมาย วิธีนี้ผู้ใช้ของคุณทุกคนมีความสุข
Lewis

2
ไม่ได้ผลสำหรับฉันเพียงแค่เรียกใช้ฟังก์ชัน onclick โดยอัตโนมัติเมื่อโหลดหน้า สิ่งนี้ดูเหมือนจะเป็นฝันร้ายที่เกี่ยวข้องกับการเข้าถึง
Shawn Solomon

4
วิธีนี้ไม่ได้ผลเพียงแค่นำคุณไปยัง href url
paddotk

59

คำตอบที่ง่ายที่สุดคือ ...

<a href="javascript:alert('You clicked!')">My link</a>

หรือเพื่อตอบคำถามในการเรียกใช้ฟังก์ชันจาวาสคริปต์:

<script type="text/javascript">
function myFunction(myMessage) {
    alert(myMessage);
}
</script>

<a href="javascript:myFunction('You clicked!')">My link</a>


2
ลิงก์ใน 'Run code snippet' ของ StackOverflow ใช้ไม่ได้ใน Firefox (ไม่มีการสร้างการแจ้งเตือน) แต่จะทำงานใน FF เมื่อฉันวางลิงก์ประเภทนี้ในหน้าเว็บปกติ
the_pwner224

ใช่มันแปลกมันใช้งานได้สำหรับฉันตอนนี้มันไม่ใช่ คนอื่น ๆ มีปัญหาที่คล้ายกันและดูเหมือนว่าจะไม่มีวิธีแก้ปัญหาที่ชัดเจนนอกจากการติดตั้ง Firefox ใหม่ทั้งหมด
Jayden Lawson

26

ด้วยพารามิเตอร์ onclick ...

<a href='http://www.google.com' onclick='myJavaScriptFunction();'>mylink</a>

คำสั่งที่สับสน ไปที่ google.com หรือเรียกใช้ฟังก์ชัน javascript ที่มีลำดับความสำคัญ?
Nguai al

12

คำตอบ JQuery เนื่องจาก JavaScript ถูกคิดค้นเพื่อพัฒนา JQuery ฉันจึงให้ตัวอย่างใน JQuery เพื่อทำสิ่งนี้:

<div class="menu">
    <a href="http://example.org">Example</a>
    <a href="http://foobar.com">Foobar.com</a>
</div>

<script>
jQuery( 'div.menu a' )
    .click(function() {
        do_the_click( this.href );
        return false;
    });

// play the funky music white boy
function do_the_click( url )
{
    alert( url );
}
</script>

53
JavaScript ถูกคิดค้นขึ้นเพื่อพัฒนา jQuery? นั่นคือสิ่งใหม่!
palswim

35
นี่เหมือนกับการอ่านว่าเลโก้ถูกประดิษฐ์ขึ้นเพื่อสร้างเลโก้แบทแมน
Shawn Solomon

5
@ShawnSolomon ฉันมีความสุขที่เราเห็นด้วย :)
elcuco

1
@elcuco ถากถางสุด ๆ ! + 'd :) Long Live JQuery
Zuul

6

ฉันชอบใช้เมธอด onclick มากกว่า href สำหรับการเชื่อมโยงหลายมิติของจาวาสคริปต์ และใช้การแจ้งเตือนเสมอเพื่อกำหนดมูลค่าที่คุณมี

<a href='#' onclick='jsFunction();alert('it works!');'>Link</a>

นอกจากนี้ยังสามารถใช้กับแท็กอินพุตเช่น

<input type='button' value='Submit' onclick='jsFunction();alert('it works!');'>


3

ตามหลักการแล้วฉันจะหลีกเลี่ยงการสร้างลิงก์ในโค้ดของคุณไว้ข้างหลังทั้งหมดเนื่องจากโค้ดของคุณจะต้องมีการคอมไพล์ใหม่ทุกครั้งที่คุณต้องการเปลี่ยนแปลง 'มาร์กอัป' ของแต่ละลิงก์เหล่านั้น หากคุณต้องทำฉันจะไม่ฝัง 'การโทร' ของจาวาสคริปต์ไว้ใน HTML ของคุณมันเป็นการปฏิบัติที่ไม่ดีโดยสิ้นเชิงมาร์กอัปของคุณควรอธิบายเอกสารของคุณไม่ใช่สิ่งที่ทำนั่นคืองานของจาวาสคริปต์ของคุณ

ใช้วิธีการที่คุณมี id เฉพาะสำหรับแต่ละองค์ประกอบ (หรือคลาสหากมีการทำงานร่วมกัน) จากนั้นใช้ Progressive Enhancement เพื่อเพิ่มตัวจัดการเหตุการณ์เช่น:

[c# example only probably not the way you're writing out your js]
Response.Write("<a href=\"/link/for/javascriptDisabled/Browsers.aspx\" id=\"uxAncMyLink\">My Link</a>");

[Javascript]  
document.getElementById('uxAncMyLink').onclick = function(e){

// do some stuff here

    return false;
    }

วิธีนี้จะไม่ทำให้โค้ดของคุณพังสำหรับผู้ใช้ที่ปิดใช้ JS และจะมีการแยกข้อกังวลที่ชัดเจน

หวังว่าเป็นประโยชน์


1
ทำไมต้อง C #? ทำไมไม่เพียง<a href="https://stackoverflow.com/link/for/javascriptDisabled/Browsers.aspx" id="uxAncMyLink">My Link</a>?
Mahmoodvcs

2

โดยทั่วไปฉันจะแนะนำให้ใช้ element.attachEvent (IE) หรือ element.addEventListener (เบราว์เซอร์อื่น ๆ ) ในการตั้งค่าเหตุการณ์ onclick โดยตรงเนื่องจากตัวจัดการเหตุการณ์ที่มีอยู่จะแทนที่ตัวจัดการเหตุการณ์ที่มีอยู่สำหรับองค์ประกอบนั้น

attachEvent / addEventListening อนุญาตให้สร้างตัวจัดการเหตุการณ์หลายตัว


1

ใช้แอตทริบิวต์onclick HTML

onclickจัดการเหตุการณ์จับเหตุการณ์คลิกจากปุ่มเมาส์ของผู้ใช้ในองค์ประกอบที่เป็นของ onclickแอตทริบิวต์ถูกนำไปใช้ การดำเนินการนี้มักจะส่งผลให้มีการเรียกใช้วิธีสคริปต์เช่นฟังก์ชัน JavaScript [... ]


1

หากคุณไม่รอให้หน้าโหลดคุณจะไม่สามารถเลือกองค์ประกอบตาม id ได้ วิธีนี้ควรใช้ได้กับทุกคนที่มีปัญหาในการเรียกใช้โค้ด

<script type="text/javascript">
window.onload = function() {
    document.getElementById("delete").onclick = function() {myFunction()};

    function myFunction() {
        //your code goes here
        alert('Alert message here');
    }
};
</script>

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