Làm cách nào để sử dụng liên kết để gọi JavaScript?


166

Làm cách nào để sử dụng một liên kết để gọi mã JavaScript?

Câu trả lời:


192
<a onclick="jsfunction()" href="#">

hoặc là

<a onclick="jsfunction()" href="javascript:void(0);">

Biên tập:

Phản hồi trên thực sự không phải là một giải pháp tốt, vì đã học được rất nhiều về JS kể từ khi tôi đăng lần đầu. Xem câu trả lời của EndangeredMassa dưới đây để biết cách tiếp cận tốt hơn để giải quyết vấn đề này.


11
Tôi muốn giới thiệu cái thứ hai, vì cái thứ nhất cuộn bạn lên đầu trang.
Matt Grande

7
Đúng, nó chắc chắn sẽ, trừ khi bạn thêm "return false;" sau chức năng của bạn.
Chelsea

26
Đây là mã năm 1998. Sử dụng một trong những giải pháp không phô trương. Xin vui lòng.
Andrew Hedges

7
Sử dụng không ai cả! Liên kết là để liên kết, chúng không phải là yếu tố giả để gọi javascript.
I.devries

4
nếu bạn định đặt javascript nội tuyến, hãy thực hiện theo cách này: <a onclick="jsfeft;return false" href="linkasn normal">
Fire Crow

201

JavaScript không phô trương, không phụ thuộc vào thư viện:

<html>
<head>
    <script type="text/javascript">

        // Wait for the page to load first
        window.onload = function() {

          //Get a reference to the link on the page
          // with an id of "mylink"
          var a = document.getElementById("mylink");

          //Set code to run when the link is clicked
          // by assigning a function to "onclick"
          a.onclick = function() {

            // Your code here...

            //If you don't want the link to actually 
            // redirect the browser to another page,
            // "google.com" in our example here, then
            // return false at the end of this block.
            // Note that this also prevents event bubbling,
            // which is probably what we want here, but won't 
            // always be the case.
            return false;
          }
        }
    </script>
</head>
<body>
    <a id="mylink" href="http://www.google.com">linky</a>        
</body>
</html>

26
Bạn có thể giải thích lý do tại sao câu trả lời này tốt hơn câu trả lời hiện được chấp nhận và kịch bản sẽ đi đến đâu trong trang (vì đây rõ ràng là một câu hỏi cấp độ mới bắt đầu)?
Bill the Lizard

8
Điều chắc chắn. Cập nhật.
nguy cơ tuyệt chủngMass

6
Vì vậy, tôi phải làm gì hrefnếu tôi không muốn chuyển hướng người dùng và chỉ muốn chạy một số mã? Chỉnh sửa: Tôi thấy rằng nó có thể để trống : href="".
SabreWolfy

6
Tại sao tốt hơn là thêm onclicksự kiện thông qua window.onload, thay vì đặt onclicktrực tiếp vào <a>thẻ?
Nathan Reed

10
Điều gì xảy ra nếu một trong những mối quan tâm của bạn là bạn không muốn tách đơn vị công việc chức năng của mình thành các vị trí thực tế khác nhau trong tệp nguồn của mình hoặc trải rộng trên nhiều tệp nguồn. Nếu bạn đặt một cuộc gọi javascript trong thẻ a href của mình, điều đó thật rõ ràng bằng cách nhìn vào một dòng đang diễn ra. Tôi sẽ lo lắng về việc tách chức năng đó thành các vị trí vật lý khác nhau, nơi khó có được hình ảnh về những gì đang diễn ra. Có lẽ đó chỉ là phong cách của tôi.
stu

47
<a href="javascript:alert('Hello!');">Clicky</a>

EDIT, năm sau: KHÔNG! Đừng bao giờ làm điều này! Tôi còn trẻ và ngu ngốc!

Chỉnh sửa, một lần nữa: Một vài người đã hỏi tại sao bạn không nên làm điều này. Có một vài lý do:

  1. Trình bày: HTML nên tập trung vào thuyết trình. Đưa JS vào HREF có nghĩa là HTML của bạn hiện đang hoạt động với logic kinh doanh.

  2. Bảo mật: Javascript trong HTML của bạn như thế vi phạm Chính sách bảo mật nội dung (CSP) . Chính sách bảo mật nội dung (CSP) là một lớp bảo mật bổ sung giúp phát hiện và giảm thiểu một số loại tấn công nhất định, bao gồm cả kịch bản chéo trang web (XSS) và tấn công tiêm dữ liệu. Các cuộc tấn công này được sử dụng cho tất cả mọi thứ, từ đánh cắp dữ liệu đến phá hoại trang web hoặc phân phối phần mềm độc hại. Đọc thêm ở đây .

  3. Khả năng truy cập: Thẻ neo là để liên kết đến các tài liệu / trang / tài nguyên khác. Nếu liên kết của bạn không đi bất cứ nơi nào, nó sẽ là một nút . Điều này giúp cho trình đọc màn hình, thiết bị đầu cuối chữ nổi, vv dễ dàng hơn để xác định những gì đang xảy ra và cung cấp cho người dùng khiếm thị thông tin hữu ích.


16
Có lẽ một số mô tả về các vấn đề với phương pháp này? Đây có phải là tồi tệ hơn href='#'alert()trong onclick?
Thomas Ahle

3
Tôi chưa quen với javascript và không hiểu điều gì sai với điều này .. Mọi lời giải thích đều tốt
nilanjanaLodh

1
Xin chào, tôi cũng không chắc chắn tại sao không sử dụng cái này? Tôi bị mắc kẹt trong một kịch bản mà tôi cần gọi một hàm JS, nhưng tất cả những gì tôi có thể chỉ định là một liên kết. Và giải pháp của bạn đã làm việc.
skapie19

43

Và, tại sao không phô trương với jQuery:

  $(function() {
    $("#unobtrusive").click(function(e) {
      e.preventDefault(); // if desired...
      // other methods to call...
    });
  });

HTML

<a id="unobtrusive" href="http://jquery.com">jquery</a>

2
Điều này sẽ làm việc cho SEO để trình thu thập thông tin sẽ tìm thấy liên kết và theo nó?
Ahi Tuna

11
bởi vì không phải ai cũng dùng jquery
stu

1
@GregMiernicki Có và không tùy thuộc vào ý của bạn qua liên kết. Nhìn vào HTML. Một webcrawler hoặc bất kỳ khách hàng nào đã tắt javascript sẽ truy cập HREF đã cho. Các máy khách được kích hoạt Javascript sẽ chạy hành động nhấp chuột và THEN theo liên kết nếu chức năng đó không trả về giá trị sai hoặc gọi ngăn chặn Default. Trong trường hợp này, href là một dự phòng, do đó tại sao nó được gọi là "không phô trương"
Evan Langlois

12

Javascript không phô trương có nhiều ưu điểm, đây là các bước cần thực hiện và tại sao nó tốt để sử dụng.

  1. liên kết tải như bình thường:

    <a id="DaLink" href="http://host/toAnewPage.html"> bấm vào đây </a>

Điều này rất quan trọng vì nó sẽ hoạt động đối với các trình duyệt không bật javascript hoặc nếu có lỗi trong mã javascript không hoạt động.

  1. javascript chạy khi tải trang:

     window.onload = function(){
            document.getElementById("DaLink").onclick = function(){
                   if(funcitonToCall()){
                       // most important step in this whole process
                       return false;
                   }
            }
     }
  2. nếu javascript chạy thành công, có thể tải nội dung trong trang hiện tại bằng javascript, trả về false sẽ hủy liên kết bắn. nói cách khác, đặt return false có tác dụng vô hiệu hóa liên kết nếu javascript chạy thành công. Trong khi cho phép nó chạy nếu javascript không, tạo một bản sao lưu đẹp để nội dung của bạn được hiển thị theo cách nào đó, cho các công cụ tìm kiếm và nếu mã của bạn bị hỏng hoặc được xem trên hệ thống không phải là javascript.

cuốn sách hay nhất về chủ đề này là "Dom Scription" của Jeremy Keith


9

Hoặc, nếu bạn đang sử dụng PrototypeJS

<script type="text/javascript>
  Event.observe( $('thelink'), 'click', function(event) {
      //do stuff

      Event.stop(event);
  }
</script>

<a href="#" id="thelink">This is the link</a>

1
Tôi thích không phải đặt các chức năng xử lý sự kiện trong dòng.
Đánh dấu Biek

1
Đó là cách duy nhất để đi. Hãy bỏ phiếu xuống các câu trả lời nội tuyến. Đó là một thực tế mà không có lý do gì trong những ngày này.
Andrew Hedges

5
@Andrew: Vui lòng để lại một bình luận cùng với downvote của bạn giải thích lý do tại sao các câu trả lời nội tuyến là xấu.
Bill the Lizard

8

Tôi nghĩ bạn có thể sử dụng onclicksự kiện này, đại loại như thế này:

<a onclick="jsFunction();">

0

dựa trên @mister_lucky sử dụng câu trả lời với jquery:

$('#unobtrusive').on('click',function (e) {
    e.preventDefault(); //optional
    //some code
});

Mã HTML:

<a id="unobtrusive" href="http://jquery.com">jquery</a>

-2

chỉ cần sử dụng javascript: ---- mẫu mực

javascript:var JFL_81371678974472 = new JotformFeedback({ formId: '81371678974472', base: 'https://form.jotform.me/', windowTitle: 'Photobook Series', background: '#e44c2a', fontColor: '#FFFFFF', type: 'false', height: 700, width: 500, openOnLoad: true })
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.