Làm thế nào để ngăn chặn lỗi trên thẻ neo?


342

Hãy nói rằng tôi có một thẻ neo như

<a href="#" ng-click="do()">Click</a>

Làm cách nào tôi có thể ngăn trình duyệt điều hướng đến # trong AngularJS ?


14
Giống như Chris nói dưới đây, chỉ cần rời khỏi href.
Jesse

13
Đó không phải là những gì Chris nói, Jesse, sử dụng href=''để giữ hành vi con trỏ chuột.
oma

1
Bạn chỉ cần xóa dấu # khỏi href, không sao.
HENG Vongkol

4
Hoặc chỉ sử dụng href = "javascript: void (0);" để giữ con trỏ nhưng không có hành động (cho đến khi bạn thêm một trình xử lý nhấp chuột khác)
Robba

1
Bạn có thể vui lòng thay đổi câu trả lời được chấp nhận thành câu trả lời hay nhất và được bình chọn nhiều nhất bởi Chris - stackoverflow.com/a/11672909 không?
Piotr Dobrogost

Câu trả lời:


259

CẬP NHẬT : Tôi đã thay đổi suy nghĩ về giải pháp này. Sau khi phát triển hơn và dành thời gian cho việc này, tôi tin rằng một giải pháp tốt hơn cho vấn đề này là làm như sau:

<a ng-click="myFunction()">Click Here</a>

Và sau đó cập nhật của bạn cssđể có một quy tắc bổ sung:

a[ng-click]{
    cursor: pointer;
}

Nó đơn giản hơn nhiều và cung cấp chính xác cùng chức năng và hiệu quả hơn nhiều. Hy vọng rằng có thể hữu ích cho bất cứ ai khác tìm kiếm giải pháp này trong tương lai.


Sau đây là giải pháp trước đây của tôi, mà tôi sẽ rời khỏi đây chỉ với mục đích kế thừa:

Nếu bạn đang gặp vấn đề này rất nhiều, một chỉ thị đơn giản sẽ khắc phục vấn đề này là:

app.directive('a', function() {
    return {
        restrict: 'E',
        link: function(scope, elem, attrs) {
            if(attrs.ngClick || attrs.href === '' || attrs.href === '#'){
                elem.on('click', function(e){
                    e.preventDefault();
                });
            }
        }
   };
});

Nó kiểm tra tất cả các thẻ neo ( <a></a>) để xem liệu hrefthuộc tính của chúng là một chuỗi rỗng ( "") hay hàm băm ( '#') hoặc có một ng-clickphép gán. Nếu nó tìm thấy bất kỳ điều kiện nào trong số này, nó sẽ bắt sự kiện và ngăn hành vi mặc định.

Mặt trái duy nhất là nó chạy lệnh này cho tất cả các thẻ neo. Vì vậy, nếu bạn có nhiều thẻ neo trên trang và bạn chỉ muốn ngăn chặn hành vi mặc định cho một số ít trong số chúng, thì lệnh này không hiệu quả lắm. Tuy nhiên, tôi hầu như luôn muốn preventDefault, vì vậy tôi sử dụng chỉ thị này trong các ứng dụng AngularJS của mình.


2
Cảm ơn @matejkramny, những lời chỉ trích rất xây dựng. Bất kỳ đề xuất để làm cho nó ít "lộn xộn"?
quần vợt

1
Như đã nêu trong các câu trả lời khác, có một hrefthuộc tính trống có hành vi khác nhau trong các trình duyệt khác nhau. Mặc dù tôi đồng ý rằng đây là giải pháp sạch nhất và hiệu quả nhất, nhưng nó có một số vấn đề về trình duyệt chéo. Sử dụng phương pháp chỉ thị cho phép trình duyệt xử lý <a>thẻ như bình thường, nhưng vẫn nhận được câu trả lời cho OP mà họ đang tìm kiếm.
quần vợt

2
Điều này hoạt động và tất cả nhưng nó quá mức nghiêm trọng cho một vấn đề rất đơn giản. Angular cung cấp cho bạn quyền truy cập vào đối tượng sự kiện với $ event, vì vậy bạn có thể thực hiện chính xác những gì bạn sẽ làm trong các sự kiện nhấp chuột js hoặc jquery đơn giản. Xem câu trả lời này stackoverflow.com/a/19240232/1826354 và nhận xét của tôi về nó
Charlie Martin

1
Vâng. Bạn có thể. Có hai câu trả lời khác trên bài đăng này đã làm những gì bạn đang mô tả. Và tôi đồng ý, nó là quá mức cần thiết. Đó là lý do tại sao tôi thực hiện cập nhật mà tôi đã làm.
quần vợt

6
Điều này tốt nếu bạn không quan tâm đến khả năng truy cập trên trang web của mình. Bằng cách rời khỏi href, không thể sử dụng bàn phím của bạn để tab vào mục đó. Trừ khi bạn thêm một tabindex. Với tất cả những điều đó, tại sao không sử dụng ngăn chặn ...? Đó là những gì nó có cho.
duhseekoh

319

Theo các tài liệu cho ngHref, bạn sẽ có thể rời khỏi href hoặc do href = "".

<input ng-model="value" /><br />
<a id="link-1" href ng-click="value = 1">link 1</a> (link, don't reload)<br />
<a id="link-2" href="" ng-click="value = 2">link 2</a> (link, don't reload)<br />
<a id="link-4" href="" name="xx" ng-click="value = 4">anchor</a> (link, don't reload)<br />
<a id="link-5" name="xxx" ng-click="value = 5">anchor</a> (no link)<br />

6
Đó là câu trả lời thực sự tốt duy nhất. Bất cứ điều gì yêu cầu chạm vào DOM hoặc các sự kiện bản địa đều có thể nghi ngờ
vincent

4
Đây là câu trả lời chính xác. Nếu bạn thả href từ thuộc tính <a> AngularJS sẽ gọi ngăn chặn mặc định:
pkozlowski.opensource

25
Nhược điểm duy nhất của việc loại bỏ thuộc tính href là bạn mất con trỏ 'con trỏ' bình thường khi di chuột qua một liên kết. Bạn có thể khắc phục điều này bằng cách thêm quy tắc vào biểu định kiểu của mình: a: hover {con trỏ: con trỏ; }
karlgold

35
Hãy nhớ rằng điều này cũng làm cho thẻ không thể tab, không thân thiện với khả năng truy cập.
Richard Szalay

3
Đối với tôi, trình duyệt vẫn hiển thị hành động nhấp chuột: /
Matej

238

Bạn có thể truyền đối tượng $ event cho phương thức của mình và gọi $event.preventDefault()nó để việc xử lý mặc định sẽ không xảy ra:

<a href="#" ng-click="do($event)">Click</a>

// then in your controller.do($event) method
$event.preventDefault()

13
vâng, và bạn cũng có thể gọi $ event.stopPropagation () để cho sự kiện không bong bóng lên (về cơ bản, bạn có quyền truy cập vào các đối tượng tổ chức sự kiện theo quy định của W3C: w3.org/TR/DOM-Level-2- Sự kiện / sự
kiện.html

1
Xin lưu ý rằng tại thời điểm này được viết, việc để trống (hoặc vắng mặt) không hoạt động trên IE8 / 9 và Opera. Đây là một năm trước và tôi chưa có cơ hội để thử lại (tôi đã mở một vấn đề sau đó trên Github, nhưng tôi nghĩ rằng họ đã đặt lại vấn đề một thời gian trước đây). Nếu điều này là cố định (hoặc bạn không quan tâm đến các trình duyệt này), thì bằng mọi cách, hãy sử dụng câu trả lời của Chris! Nếu ai đó có thể thử nó và nhận xét / chỉnh sửa câu trả lời, thậm chí tốt hơn.
mẹ

1
@PuerkitoBio - Tôi có thể xác nhận rằng IE8 trở xuống vẫn yêu cầu $event.preventDefault()... thuế IE.
Scotty.NET 18/07/13

4
chuyển sự kiện $ cho bộ điều khiển có nghĩa là tham chiếu DOM trong bộ điều khiển của bạn, điều đó có nghĩa là bạn đã kết hợp chế độ xem và bộ điều khiển của mình. Bạn có thể gọi trực tiếp các phương thức sự kiện $ trong biểu thức được đánh giá của mình: ng-click="do(); $event.preventDefault()ví dụ ... mặc dù vậy, không cần thiết vì câu trả lời của @ Chris dưới đây là phương thức đúng. Điều này có thể giúp mọi người trong tình huống họ đã lồng ngClicks và họ muốn gọi $event.stopPropagation(), tuy nhiên.
Ben Lesh

2
Cuối cùng là một giải pháp thân thiện với SEO. Bạn cũng có thể muốn cập nhật URL trình duyệt mà không cần tải lại ng-view - joelsaupe.com/programming/ trộm Bằng cách đó bạn có các liên kết không tải lại chế độ xem của mình, nhưng có thể được mở trong tab mới và công cụ tìm kiếm có thể theo dõi chúng. YAY!
Tom

111

Tôi thích sử dụng các chỉ thị cho loại điều này. Đây là một ví dụ

<a href="#" ng-click="do()" eat-click>Click Me</a>

Và mã lệnh cho eat-click:

module.directive('eatClick', function() {
    return function(scope, element, attrs) {
        $(element).click(function(event) {
            event.preventDefault();
        });
    }
})

Bây giờ bạn có thể thêm eat-clickthuộc tính cho bất kỳ phần tử nào và nó sẽ preventDefault()tự động được chỉnh sửa.

Những lợi ích:

  1. Bạn không cần phải truyền $eventđối tượng xấu xí vào do()chức năng của mình .
  2. Bộ điều khiển của bạn có thể kiểm tra được nhiều đơn vị hơn vì nó không cần phải loại bỏ $eventđối tượng

1
@Kato Angular đi kèm với tập hợp con jQuery của riêng nó, để làm cho cuộc sống của chúng ta dễ dàng.
Neil

3
Lợi ích bổ sung - điều này cũng hoạt động trong IE8 trở xuống, nếu điều đó quan trọng với bạn.
Scotty.NET

1
Tôi đang nhận được Error: $ is not defined. Tôi đang thiếu gì?
Bilal Mirza

7
Tôi đã thử angular.element(element).bind('click', function(event){...});. Nó đã làm việc. Tham chiếu: jQLite
Bilal Mirza

3
Giới thiệu một chỉ thị cho một cái gì đó đơn giản như thế có vẻ hơi bực bội nếu bạn hỏi tôi ... Kiểm tra câu trả lời của Chris bên dưới
Héo

54

Mặc dù Renaud đã đưa ra một giải pháp tuyệt vời

<a href="#" ng-click="do(); $event.preventDefault()">Click</a> 

Cá nhân tôi thấy bạn cũng cần $ event.stopPropagation () trong một số trường hợp để tránh một số tác dụng phụ

<a href="#" ng-click="do(); $event.preventDefault(); $event.stopPropagation();">
    Click</a>

sẽ là giải pháp của tôi


34
ng-click="$event.preventDefault()"

13
Đây là giải pháp tốt nhất. Tất nhiên, bạn cũng có thể chuyển đối tượng $ event cho hàm scope của mình. Giống như ng-click = "myFunction ($ event, otherParams) và sau đó là $ event.preventDefault () trong myFactor. Đưa ra chỉ thị của riêng bạn cho việc này là quá mức cần thiết
Charlie Martin

34

Giải pháp đơn giản nhất tôi đã tìm thấy là giải pháp này:

<a href="#" ng-click="do(); $event.preventDefault()">Click</a>

Đây không chỉ là dễ nhất, mà còn không kết hợp các sự kiện với bộ điều khiển như được đề xuất trong các giải pháp khác. Khớp các sự kiện với bộ điều khiển là điều bạn nên tránh bằng mọi giá vì nó khiến việc kiểm tra khó khăn hơn rất nhiều.
jornare

11

Vì vậy, đọc qua những câu trả lời này, @Chris vẫn có câu trả lời "đúng" nhất, tôi cho rằng, nhưng nó có một vấn đề, nó không hiển thị "con trỏ" ....

Vì vậy, đây là hai cách để giải quyết vấn đề này mà không cần thêm con trỏ: kiểu con trỏ:

  1. Sử dụng javascript:void(0)thay vì #:

    <a href="javascript:void(0)" ng-click="doSomething()">Do Something</a>
  2. Sử dụng $event.preventDefault()trong ng-clickchỉ thị (để bạn không bỏ qua bộ điều khiển của mình với các tham chiếu liên quan đến DOM):

    <a href="#dontGoHere" ng-click="doSomething(); $event.preventDefault()">Do Something</a>

Cá nhân tôi thích cái trước hơn cái sau. javascript:void(0)có những lợi ích khác được thảo luận ở đây . Ngoài ra còn có cuộc thảo luận về "JavaScript không phô trương" trong liên kết gần đây đáng sợ và không nhất thiết phải áp dụng trực tiếp cho một ứng dụng góc cạnh.


2
Tại sao điều này bị hạ cấp? Tôi cũng nhận thấy rằng con trỏ không hiển thị với câu trả lời từ Chris.
Wim Deblauwe

2
javascript: void (0) tốt hơn nhiều so với # có thể hoạt động trên tuyến nếu bạn định cấu hình sai. +1
Shay Elkayam

2
Tôi chỉ định viết một câu trả lời cho điều này. Bạn cũng có thể làmjavascript:;
Adrian

10

Bạn có thể làm như sau

1.Remove hrefthuộc tính từ neo (a thẻ )

2. Đặt con trỏ con trỏ trong css để ng nhấp vào phần tử

 [ng-click],
 [data-ng-click],
 [x-ng-click] {
     cursor: pointer;
 }

9

HTML

Ở đây, angularjs thuần túy: gần chức năng ng-click, bạn có thể viết hàm ngăn chặnDefDef () bằng cách tách dấu chấm phẩy

<a href="#" ng-click="do(); $event.preventDefault(); $event.stopPropagation();">Click me</a>

Mã não

$scope.do = function() {
    alert("do here anything..");
}

(hoặc là)

bạn có thể tiến hành theo cách này, điều này đã được thảo luận ở đây.

HTML

<a href="#" ng-click="do()">Click me</a>

Mã não

$scope.do = function(event) {
    event.preventDefault();
    event.stopPropagation()
}

7

Hãy thử tùy chọn này mà tôi có thể thấy chưa được liệt kê ở trên:

<a href="" ng-click="do()">Click</a>

6

Vì bạn đang làm một ứng dụng web tại sao bạn cần liên kết?

Trao đổi neo của bạn để các nút!

<button ng-click="do()"></button>

2
Vì các ứng dụng web không thể có neo?
Robin van Baalen

1
Tôi đã đề cập đến vấn đề rằng hầu hết các ứng dụng web không cần các liên kết tương đối như các trang web, chúng cũng thường chỉ sử dụng các liên kết neo làm trình kích hoạt javascript và không liên kết đến một trang; do đó, một nút với thiết lập lại kiểu mặc định là chính xác về mặt ngữ nghĩa nếu không muốn nói là như vậy.
sidonaldson

3
@sidonaldson Trên thực tế, rất nhiều ứng dụng web ngày nay phụ thuộc rất nhiều vào các liên kết. Nhìn vào định tuyến angularjs.
Robert

1
@Robert có nhưng nếu bạn sử dụng định tuyến tích hợp, bạn không phải quản lý ngăn chặn mặc định, nó đã hoàn thành cho bạn. Tôi giả sử vì người đăng muốn hủy một liên kết neo mà anh ta đang nói về các liên kết không theo tuyến. Ví dụ: khởi chạy một phương thức, v.v.
sidonaldson 22/05/2015

2
Câu trả lời này nên có nhiều upvote hơn. Trong nhiều trường hợp, nếu bạn muốn ngăn chặn hành vi neo mặc định, bạn đang sử dụng neo làm nút chứ không phải liên kết.
ItsCosmo

6

nếu vẫn có liên quan:

<a ng-click="unselect($event)" />

...

scope.unselect = function( event ) {
 event.preventDefault();
 event.stopPropagation();
}

...

6

Cách an toàn nhất để tránh các sự kiện trên an href sẽ là xác định nó là

<a href="javascript:void(0)" ....>

5

Tôi sẽ đi với:

<a ng-click="do()">Click</a>
  • bởi vì theo các tài liệu bạn sẽ có thể rời khỏi href và sau đó Angular sẽ xử lý mặc định ngăn chặn cho bạn!

Toàn bộ điều này ngăn chặn điều mặc định đã gây nhầm lẫn cho tôi, vì vậy tôi đã tạo ra một JSFiddle ở đó minh họa khi nào và nơi Angular đang ngăn chặn mặc định .

JSFiddle đang sử dụng một lệnh của Angular - vì vậy nó phải chính xác như vậy. Bạn có thể xem mã nguồn ở đây: mã nguồn thẻ

Tôi hy vọng điều này sẽ giúp làm rõ cho một số.

Tôi muốn đăng tài liệu lên ngHref nhưng tôi không thể vì danh tiếng của mình.


5

Đây là những gì tôi luôn luôn làm. Hoạt động như một lá bùa!

<a href ng-click="do()">Click</a>

4

Hoặc nếu bạn cần nội tuyến thì bạn có thể làm điều này:

<a href="#" ng-click="show = !show; $event.preventDefault()">Click to show</a>

4

Rất nhiều câu trả lời dường như là quá mức cần thiết. CHO TÔI, công việc này

 <a ng-href="#" ng-click="$event.preventDefault();vm.questionContainer($index)">{{question.Verbiage}}</a>

2

Tôi cần sự hiện diện của giá trị thuộc tính href cho sự xuống cấp (khi tắt js), vì vậy tôi không thể sử dụng thuộc tính blank href (hoặc "#"), nhưng mã ở trên không hoạt động với tôi, vì tôi cần một sự kiện ( e) biến. Tôi đã tạo ra chỉ thị của riêng mình:

angular.module('MyApp').directive('clickPrevent', function() {
  return function(scope, element, attrs) {
    return element.on('click', function(e) {
      return e.preventDefault();
    });
  };
});

Trong HTML:

<a data-click-prevent="true" href="/users/sign_up" ng-click="openSignUpModal()">Sign up</a>

2

Mượn từ câu trả lời của tennisgent. Tôi thích rằng bạn không phải tạo một chỉ thị tùy chỉnh để thêm vào tất cả các liên kết. Tuy nhiên, tôi không thể khiến anh ấy làm việc trong IE8. Đây là những gì cuối cùng đã làm việc cho tôi (sử dụng góc 1.0.6).

Lưu ý rằng 'bind' cho phép bạn sử dụng jqLite được cung cấp bởi angular nên không cần phải bọc với jQuery đầy đủ. Cũng yêu cầu phương pháp stopPropogation.

.directive('a', [
    function() {
        return {
            restrict: 'E',
            link: function(scope, elem, attrs) {

                elem.bind('click', function(e){
                    if (attrs.ngClick || attrs.href === '' || attrs.href == '#'){
                        e.preventDefault();
                        e.stopPropagation();
                    }
                })
            }
        };
    }
])

3
Điều này giết chết nhiều. Ví dụ: khi tôi sử dụng Twitter Bootstrap dropdown, tôi muốn tuyên truyền nhưng không phải là hành vi mặc định. Đoạn trích này KHÔNG được khuyến khích.
Robin van Baalen

2

Tôi gặp vấn đề tương tự khi sử dụng neo cho một bootstrap góc cạnh thả xuống. Giải pháp duy nhất tôi thấy rằng đã tránh được các tác dụng phụ không mong muốn (ví dụ: thả xuống không đóng vì sử dụng ngăn chặnDefault ()) là sử dụng như sau:

 <a href="javascript:;" ng-click="do()">Click</a>

2

nếu bạn không bao giờ muốn truy cập ... bạn nên thay đổi đánh dấu của mình và sử dụng nút không phải là thẻ neo vì về mặt ngữ nghĩa, đó không phải là neo hoặc liên kết. Ngược lại, nếu bạn có một nút thực hiện một số kiểm tra và sau đó chuyển hướng thì đó phải là một thẻ liên kết / neo và không phải là nút ... cho mục đích SEO cũng như thử nghiệm [chèn bộ kiểm tra tại đây].

đối với các liên kết mà bạn chỉ muốn chuyển hướng có điều kiện như nhắc nhở để lưu các thay đổi hoặc thừa nhận trạng thái bẩn ... bạn nên sử dụng ng-click = "someFunction ($ event)" và trong một số chức năng trên xác thực của bạnError ngăn chặn Lỗi và hoặc dừng hoạt động.

cũng chỉ vì bạn không có nghĩa là bạn nên . javascript: void (0) hoạt động tốt trở lại trong ngày ... nhưng vì các tin tặc / cracker bất hợp pháp trình duyệt các ứng dụng / trang web sử dụng javascript trong an href ... không thấy lý do gì để vịt ở trên ..

Đó là năm 2016 kể từ năm 2010, không có lý do gì để sử dụng các liên kết hoạt động như các nút ... nếu bạn vẫn phải hỗ trợ IE8 và bên dưới, bạn cần đánh giá lại địa điểm kinh doanh của mình.


1
/* NG CLICK PREVENT DEFAULT */

app.directive('ngClick', function () {
    return {
        link: function (scope, element, attributes) {
            element.click(function (event) {
                event.preventDefault();
                event.stopPropagation();
            });
        }
    };
});

1

Những gì bạn nên làm, là bỏ hrefhoàn toàn thuộc tính.

Nếu bạn xem mã nguồn của achỉ thị phần tử (là một phần của lõi Angular), thì nó nêu ở dòng 29 - 31:

if (!element.attr(href)) {
    event.preventDefault();
}

Điều đó có nghĩa là Angular đã giải quyết vấn đề liên kết mà không có a href. Vấn đề duy nhất bạn vẫn có là vấn đề css. Bạn vẫn có thể áp dụng kiểu con trỏ cho các neo có ng-click, ví dụ:

a[ng-click] {
    /* Styles for anchors without href but WITH ng-click */
    cursor: pointer;
}

Vì vậy, bạn thậm chí có thể làm cho trang web của mình dễ truy cập hơn bằng cách đánh dấu các liên kết thực với kiểu dáng tinh tế, khác biệt sau đó liên kết thực hiện các chức năng.

Chúc mừng mã hóa!


1

Bạn có thể vô hiệu hóa chuyển hướng url bên trong Html5Mode của $ location để đạt được mục tiêu. Bạn có thể xác định nó bên trong bộ điều khiển cụ thể được sử dụng cho trang. Một cái gì đó như thế này:

app.config(['$locationProvider', function ($locationProvider) {
    $locationProvider.html5Mode({
        enabled: true,
        rewriteLinks: false,
        requireBase: false
    });
}]);


1

Nếu bạn đang sử dụng Angular 8 trở lên, bạn có thể tạo một lệnh:

import { Directive, HostListener } from '@angular/core';

@Directive({
  selector: '[preventDefault]'
})
export class PreventDefaultDirective {

  @HostListener("click", ["$event"])
  public onClick(event: any): void
  {
    console.log('click');
    debugger;
      event.preventDefault();
  }

}

Trên thẻ neo của bạn trên thành phần, bạn có thể nối nó như thế này:

  <a ngbDropdownToggle preventDefault class="nav-link dropdown-toggle" href="#" aria-expanded="false" aria-haspopup="true" id="nav-dropdown-2">Pages</a>

Mô-đun ứng dụng nên có tuyên bố của nó:

import { PreventDefaultDirective } from './shared/directives/preventdefault.directive';


@NgModule({
  declarations: [
    AppComponent,
    PreventDefaultDirective

-1

Một sự thay thế có thể là:

<span ng-click="do()">Click</span>

1
Đó là thực tế khủng khiếp để lạm dụng một spanmục đích nhấp chuột. Chỉ cần đi tới câu trả lời của @ tennisgent - neo mà không hrefđược xác định.
Robin van Baalen

1
@RobinvanBaalen Phần tử span đã được xác định là có thể nhấp vì ít nhất HTML 4.0.1: w3.org/TR/html401/struct/global.html#edef-SPAN w3.org/TR/html5/dom.html#global-attribut html.spec.whatwg.org/multipage/dom.html#global-attribut
Terence Bandoian

1
Nếu bạn làm <span> Xin chào </ span> kể từ khi nào thì có thể nhấp được? Điều mà thông số kỹ thuật có thể nói là <span> có thể được sử dụng bên trong một yếu tố có thể nhấp, chẳng hạn như <a> hoặc <button>. Nhưng sau đó, một lần nữa, tất cả các thành phần khối nội tuyến (img, span, v.v.) có thể được thực hiện theo cách đó. Một nhịp không thể nhấp được.
Robin van Baalen

1
@RobinvanBaalen Vui lòng xem các liên kết ở trên. Thuộc tính onclick cho các phần tử span đã được xác định từ ít nhất HTML 4.01.
Terence Bandoian

1
Tôi chưa bao giờ nói rằng việc thêm một trình xử lý sự kiện sẽ không hiệu quả trong một khoảng thời gian. Tôi đã nói rằng đó là một thực tế tồi để tạo ra một yếu tố không thể nhấp như span, div, mục, ul, li, v.v. có thể nhấp bằng cách sử dụng trình xử lý sự kiện javascript. Đó là tất cả về ngữ nghĩa. Ngữ nghĩa trong HTML là thực hành cung cấp nội dung trên ý nghĩa và cấu trúc của trang bằng cách sử dụng phần tử thích hợp.
Robin van Baalen
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.