script links without href=“#”

前端 未结 6 1887
终归单人心
终归单人心 2020-12-02 14:25

My web application uses a lot of Perform client script action anchor links which are used for scripting (a habit I picked-up from

相关标签:
6条回答
  • 2020-12-02 14:51

    <a> stands for anchor

    If you include the [href] attribute on an <a> element, it is an anchor that points to a location, which means that you could go to a new page, a particular fragment of the current page (hence the # being called the fragment identifier), or a particular fragment of a new page.

    <a> elements without an [href] attribute were historically assigned a [name] attribute, which could be used as the destination of the fragment identifier. Browsers later added support for linking to any item's [id] attribute, and this is now the preferred method for linking to a document fragment.

    What does this mean for standalone <a> elements?

    An a[href] element is a link (which is why they are matched with :link in css). links are clickable. An a element without the [href] attribute is otherwise just a placeholder for where a link might otherwise have been placed, and not clickable, nor are they in the tabbing order of the page.

    If you want your links to be keyboard navigable which is important for accessibility (WAI-ARIA), you'll need to do one of the following:

    • change the element to <button type="button">
    • keep the [href] attribute
    • add [tabindex="0"] and one of [role="button"] or [role="link"] (and possibly some styling)

    More information about the [role] attribute can be found in the Roles Model section of the WAI-ARIA docs.

    Changing the markup

    If you don't have a reason to keep the [href] attribute, you might as well be using a <button> element:

    <button type="button">
            ^^^^^^^^^^^^^
    

    The [type] attribute is used to make the element a generic button, otherwise <button> will default to [type="submit"], which may not be desirable as it could trigger form submission.

    If you can't use a <button> (usually occurs when the inner markup must contain a <div>) you can fake a <button> using:

    <div role="button" tabindex="0">Some clickable text</div>
    

    You'll need to listen for keypress events and trigger click events for Enter and Space.

    Keeping the markup

    If you're keeping the <a> element and its [href] attribute, there are a number of options for its value.

    A real link

    E.x.

    • <a href="/some/location/for/users/without/js">
    • <a href="#document-fragment">

    If you need to provide support for users with JS disabled, you might as well direct them to a page that performs equivalent functionality without JS.

    By extension, this also includes providing document fragment links to link to the content within the same document. For example, a toggleable region may be marked up as:

    <a href="#more" class="toggleable">Read More</a>
    <div id="more">Lorem ipsum dolor sit amet</div>
    

    So that with JS the region can be collapsed and expanded, and without JS the link will take the user to the appropriate content on the page.

    A dud href

    E.x.

    • <a href="#">
    • <a href="javascript:void(0)">
    • <a href="about:blank">

    If you're preventing the default behavior behind-the-scenes in JavaScript, and you're not supporting users with JS disabled, you can use a "dud" href value to keep the link in the tabbing order and automatically enable Enter to trigger the click event. You should add [role="button"] as semantically the <a> tag is no longer being used as a link, but as a button.

    <a href="#" role="button">Some clickable text</a>
    
    0 讨论(0)
  • 2020-12-02 14:54

    Not aware of any voodoo but if you have many links on the page and you pull the href then you will have to add a class name to give you the blue and underline on each. In other words why introduce more work when the browser will all ready take care or it. So in short stick with what you know and I suspect that if you remove the href the page will not validate http://validator.w3.org/

    0 讨论(0)
  • 2020-12-02 15:01

    I was implementing a HTML, CSS, JS template to React and this line of code works for me perfectly:

    <a href={() => false}> Link </a>
    
    0 讨论(0)
  • 2020-12-02 15:10

    I had this issue, specifically needing an accordion title to be an <a> so that it could be tabbed but not clicked. This will not work without an href, so I put text of an id after the "#" in the href and it appears to work. It makes the links accessible for tabbing, but not able to be clicked.

    <a href="#${accordionGroup.id}"> Title </a>

    which outputs as:

    <a href="#acc234923"> Title </a>

    0 讨论(0)
  • 2020-12-02 15:11

    I got the same issue with react js.

    Line 273:  Links must not point to "#". Use a more descriptive href or use a button instead  jsx-a11y/href-no-hash
    

    like this to remove the error I have used the

    before :

     <a 
          href="#"
          className="banner-signup signup-btn envy-font-sans-bold"
          onClick={(e) => this.gonext()}
        >
         NEXT
        </a>
    

    used the href="#/" on the place of href="#"

     <a 
          href="#/"
          className="banner-signup signup-btn envy-font-sans-bold"
          onClick={(e) => this.gonext()}
        >
         NEXT
        </a>
    
    0 讨论(0)
  • 2020-12-02 15:14

    Personally I prefer to use href="javascript:void(null);", to give the browser an href that won't mess up any other use of hashes.

    The only difference I've noticed about href-less links is that the browser will not underline them by default, so just add that style in and you should be good.

    0 讨论(0)
提交回复
热议问题