Thẻ HTML <a> muốn thêm cả href và onclick hoạt động


123

Tôi muốn hỏi về thẻ HTML

<a href="www.mysite.com" onClick="javascript.function();">Item</a>

Làm cách nào để đặt thẻ này thành một thẻ hoạt động với hrefonClick ? (thích onClick chạy trước rồi đến href)

Câu trả lời:


232

Bạn đã có những gì bạn cần, với một thay đổi nhỏ về cú pháp:

<a href="www.mysite.com" onclick="return theFunction();">Item</a>

<script type="text/javascript">
    function theFunction () {
        // return true or false, depending on whether you want to allow the `href` property to follow through or not
    }
</script>

Hành vi mặc định của <a>thẻ onclickhrefthuộc tính là thực thi onclick, sau đó theo dõi hrefmiễn là onclicknó không trả lại false, hủy sự kiện (hoặc sự kiện không bị ngăn chặn)


Có cách nào để thực hiện việc này với hàm element.addEventListener không?
TheEquah 25/02/17

4
Không hoạt động với tôi, cho đến khi tôi đặt href="#"ở đó thay vì một URL thực.
yegor256

Tôi đang sử dụng laravel framework, vì vậy trong khung nhìn phiến của tôi, tôi đã bao gồm cái này, Nó không hoạt động, có ai đã thử cái này với laravel chưa?
Vajira Prabuddhaka

Giải pháp này không hoạt động nếu tôi có bất kỳ phương thức hành động nào được gọi trong bộ điều khiển mvc trong href. Ai đó có thể vui lòng giúp đỡ?
DharaPPatel

10

Sử dụng jQuery . Bạn cần nắm bắt clicksự kiện và sau đó vào trang web.

$("#myHref").on('click', function() {
  alert("inside onclick");
  window.location = "http://www.google.com";
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a href="#" id="myHref">Click me</a>


11
tôi sẽ không sử dụng bất kỳ khuôn khổ javascript nào. nhưng cảm ơn bạn đã trả lời của bạn

7
Trên đây không phải là một liên kết thực tế. Nó không thể được mở trong một tab mới và là một thực tế rất xấu. Nếu có thể mở thứ gì đó trong tab mới (có na url), hãy luôn thêm hrefthuộc tính có ý nghĩa .
Nux

2

Để đạt được điều này, hãy sử dụng html sau:

<a href="www.mysite.com" onclick="make(event)">Item</a>

<script>
    function make(e) {
        // ...  your function code
        // e.preventDefault();   // use this to NOT go to href site
    }
</script>

Đây là ví dụ làm việc .


Điều này hoạt động đối với tôi trong Chrome tuy nhiên Safari dường như chạy chức năng nhưng không mở href ... bất kỳ sự cố nào?
Ben

@Ben Tôi đã thực hiện thử nghiệm trên fiddle mà không có JS - chỉ html thuần túy: <a href="http://example.com" >Item</a>và trong Chrome, tôi thấy một số thông báo cho phép trang chạy liên kết này (cảnh báo ở cuối thanh url chrome). Trong safari trong bảng điều khiển, tôi thấy cảnh báo: [bị chặn] Trang tại fiddle.jshell.net/_display không được phép hiển thị nội dung không an toàn từ example.com - vì vậy có thể đây là một số vấn đề bảo mật (chỉ trên fiddle?)
Kamil Kiełczewski

1

Không cần jQuery.

Một số người nói rằng sử dụng onclick là thực hành xấu ...

Ví dụ này sử dụng javascript trình duyệt thuần túy. Theo mặc định, có vẻ như trình xử lý nhấp chuột sẽ đánh giá trước điều hướng, vì vậy bạn có thể hủy điều hướng và tự làm nếu muốn.

<a id="myButton" href="http://google.com">Click me!</a>
<script>
    window.addEventListener("load", () => {
        document.querySelector("#myButton").addEventListener("click", e => {
            alert("Clicked!");
            // Can also cancel the event and manually navigate
            // e.preventDefault();
            // window.location = e.target.href;
        });
    });
</script>

-1

Sử dụng ng-clickthay cho onclick. và nó đơn giản như vậy:

<a href="www.mysite.com" ng-click="return theFunction();">Item</a>

<script type="text/javascript">
function theFunction () {
    // return true or false, depending on whether you want to allow 
    // the`href` property to follow through or not
 }
</script>

Chỉ có trong AngularJS
Corrodian
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.