gọi hàm javascript khi nhấp vào siêu liên kết


Câu trả lời:


133

Vẫn gọn gàng hơn, thay vì typical href="#"hoặc href="javascript:void"hoặc href="whatever", tôi nghĩ điều này có ý nghĩa hơn nhiều:

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>

Nếu Javascript không thành công, có một số phản hồi. Hơn nữa, hành vi thất thường (nhảy trang trong trường hợp href="#", truy cập cùng một trang trong trường hợp href="") bị loại bỏ.


13
+1 Đây hiện là câu trả lời duy nhất không phô trương. +100 nếu tôi có thể.
James

@Lewis, vâng, lý tưởng nhất là các thẻ <a> sẽ không được sử dụng cho các lệnh gọi js thuần túy, nhưng rất tiếc là các trình duyệt cũ hơn không hỗ trợ: di chuột cho các phần tử không liên kết. Vì vậy, các liên kết thường được sử dụng để kích hoạt các sự kiện js.
Chris Van Opstal

@Chris - Tôi không chắc bạn hiểu quan điểm của tôi, Chris. Tôi khuyên bạn không nên sử dụng <a href="#"> Không làm gì </a> và thay vào đó hãy sử dụng <a href="a/link/somwhere.html"> Làm gì đó </a> và sau đó sử dụng nâng cao lũy tiến để ghi đè href. Đây là giải pháp sạch nhất. Anchors là tốt, nhưng chúng sẽ thực hiện SOMETHING nếu javascript bị vô hiệu hóa - hoặc vì lý do nào đó (theo IE6) một số javascript bị hỏng trước khi trình xử lý được tạo và gán. Bằng cách này, tất cả người dùng của bạn đều hài lòng.
Lewis

2
Không hoạt động đối với tôi, chỉ tự động thực hiện chức năng onclick khi tải trang. Đây cũng có vẻ như là một cơn ác mộng khi liên quan đến khả năng tiếp cận.
Shawn Solomon

4
Điều này không hiệu quả, nó chỉ hướng bạn đến url href.
paddotk

58

Câu trả lời đơn giản nhất là ...

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

Hoặc để trả lời câu hỏi về cách gọi hàm javascript:

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

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


2
Liên kết trong 'Đoạn mã chạy' của StackOverflow không hoạt động trong Firefox (không có cảnh báo nào được tạo), nhưng nó hoạt động trong FF khi tôi đặt loại liên kết này trên một trang web bình thường.
the_pwner224

Vâng, thật kỳ lạ, nó đã làm việc cho tôi, bây giờ thì không. Những người khác cũng gặp sự cố tương tự và dường như không có giải pháp dứt điểm nào, ngoài việc cài đặt lại hoàn toàn Firefox.
Jayden Lawson

26

Với tham số onclick ...

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

tuyên bố khó hiểu. nó sẽ truy cập google.com hay gọi hàm javascript? cái nào có mức độ ưu tiên?
Nguai al

12

Câu trả lời JQuery. Vì JavaScript được phát minh để phát triển JQuery, tôi sẽ cung cấp cho bạn một ví dụ trong JQuery làm điều này:

<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 được phát minh để phát triển jQuery? Đó là một cái mới!
palswim

35
Điều này giống như đọc rằng Lego được phát minh để xây dựng Lego Batman.
Shawn Solomon

5
@ShawnSolomon Tôi rất vui vì chúng tôi đồng ý :)
elcuco

1
@elcuco, mỉa mai tuyệt vời! + 'd :) Long Live JQuery
Zuul

6

Tôi thích sử dụng phương pháp onclick hơn là href cho các siêu liên kết javascript. Và luôn sử dụng cảnh báo để xác định giá trị bạn có.

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

Nó cũng có thể được sử dụng trên các thẻ đầu vào, ví dụ.

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


3

Lý tưởng nhất là tôi sẽ tránh hoàn toàn tạo ra các liên kết trong mã của bạn vì mã của bạn sẽ cần biên dịch lại mỗi khi bạn muốn thực hiện thay đổi đối với 'đánh dấu' của từng liên kết đó. Nếu bạn phải làm điều đó, tôi sẽ không nhúng các 'lệnh gọi' javascript của bạn vào bên trong HTML của bạn, đó hoàn toàn là một phương pháp không tốt, đánh dấu của bạn phải mô tả tài liệu của bạn không phải những gì nó làm, đó là công việc của javascript.

Sử dụng cách tiếp cận mà bạn có một id cụ thể cho từng phần tử (hoặc lớp nếu chức năng chung của nó) và sau đó sử dụng Tính năng nâng cao lũy tiến để thêm (các) trình xử lý sự kiện, chẳng hạn như:

[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;
    }

Bằng cách đó, mã của bạn sẽ không bị hỏng đối với những người dùng bị vô hiệu hóa JS và nó sẽ có sự phân biệt rõ ràng về các mối quan tâm.

Hy vọng đó là sử dụng.


1
Tại sao C #? Tại sao không chỉ <a href="https://stackoverflow.com/link/for/javascriptDisabled/Browsers.aspx" id="uxAncMyLink">My Link</a>?
Mahmoodvcs

2

Nói chung, tôi khuyên bạn nên sử dụng element.attachEvent (IE) hoặc element.addEventListener (các trình duyệt khác) để thiết lập trực tiếp sự kiện onclick vì sau này sẽ thay thế bất kỳ trình xử lý sự kiện hiện có nào cho phần tử đó.

AttachEvent / addEventListening cho phép tạo nhiều trình xử lý sự kiện.


1

Sử dụng onclickthuộc tính HTML .

Trình onclickxử lý sự kiện nắm bắt một sự kiện nhấp chuột từ nút chuột của người dùng trên phần tử mà onclickthuộc tính được áp dụng. Hành động này thường dẫn đến một lệnh gọi đến một phương thức tập lệnh, chẳng hạn như hàm JavaScript [...]


1

Nếu bạn không đợi trang được tải, bạn sẽ không thể chọn phần tử theo id. Giải pháp này sẽ hoạt động đối với bất kỳ ai gặp sự cố khi mã thực thi

<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>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.