<a id='MyLink' href="#">My Link</a>or even worse:-
<a id='ClickMe' href="javascript:void(0);">Click Me</a>and some jQuery which executes some code, BUT does not redirect the user.
<script> $('#ClickMe').click(function(e) { e.preventDefault(); alert('Me clicked'); }); </script>Now this works if:-
- Javascript is enabled
- If JS is disabled then the link should actually should have a fall back, however in this case we don't want to redirect anywhere
- Not all browsers support e.preventDefault() so to circumvent this we add a return false at the end of the function
- If the page is long; that is longer than the height of the screen then in some browsers the page will jump to the top, losing the Y position
If you think about it these "anchors" exist solely to provide a click event, but do not actually link to other content.
So is there a better solution?
One very nice approach is to convert the anchor tag to a button element.It can be styled like so:
<button id='Click Me' style="border:none; background:transparent; cursor: pointer;">Click me</button>the javascript can then be changed to:-
<script> $('#ClickMe').click(function(e) { alert('Me clicked'); }); </script>And of course click events can be attached to buttons without worry of the browser jumping to the top, and without adding extraneous javascript such as onclick="return false;" or event.preventDefault() or even return false.
I was searching online for this very question. I agree with you. Its more semantically correct anyways, is it not?
ReplyDeleteWat are yo saying
ReplyDelete