我已经看到了将JavaScript代码放在 <a>
标记中的以下方法:
function DoSomething() { ... return false; }
-
<a href="javascript:;" onClick="return DoSomething();">link</a>
-
<a href="javascript:DoSomething();">link</a>
-
<a href="javascript:void(0);" onClick="return DoSomething();">link</a>
-
<a href="#" onClick="return DoSomething();">link</a>
我理解尝试放置有效URL而不仅仅是JavaScript代码的想法,以防用户没有启用JavaScript . 但是为了讨论的目的,我需要假设启用了JavaScript(没有它就无法登录) .
我个人喜欢选项2,因为它可以让你看到将要运行的内容 - 在调试传递给函数的参数时特别有用 . 我已经使用了很多,并没有发现浏览器问题 .
我读过人们推荐4,因为它给了用户一个真实的链接,但实际上,#不是“真实的” . 它绝对不会在哪里 .
当您知道用户启用了JavaScript时,是否有一个不支持或非常糟糕?
相关问题:Href for JavaScript links: “#” or “javascript:void(0)”? .
7 回答
我非常喜欢Matt Kruse's Javascript Best Practices article . 在其中,他声明使用
href
部分执行JavaScript代码是一个坏主意 . 即使您已声明您的用户必须启用了JavaScript,但如果有人在登录后关闭了JavaScript,那么_976451会有一个简单的HTML页面,您的所有JavaScript链接都可以指向他们的href
部分 . 我会高度评价鼓励你仍然允许这种后备机制 . 这样的事情将遵循"best practices"并实现您的目标:为什么要在使用
addEventListener
/attachEvent
时执行此操作?如果没有href
-equivalent,请不要使用<a>
,请使用<button>
并相应地设置样式 .你忘了另一种方法:
使用JavaScript代码:
我无法评论哪个选项具有最佳支持或哪个选项在语义上最好,但我只是说我更喜欢这种风格,因为它将您的内容与JavaScript代码分开 . 它将所有JavaScript代码保持在一起,这更容易维护(特别是如果您将其应用于许多链接),您甚至可以将其放在外部文件中,然后可以将其打包以减少文件大小并由客户端浏览器缓存 .
我会这样做,或者:
视情况而定 . 对于较大的应用程序,第二个是最好的,因为它会整合您的事件代码 .
方法#2在FF3和IE7中有语法错误 . 我更喜欢#1和#3方法,因为#4使用'#'来弄脏URI虽然导致更少的输入...显然,正如其他响应所指出的,最好的解决方案是从事件处理中单独的html .
仅限现代浏览器
跨浏览器
您可以在文档准备好之前运行它,单击按钮将起作用,因为我们将事件附加到文档 .
资料来源:
Test if an element contains a class?
event.preventDefault() function not working in IE
https://gist.github.com/eduardocereto/955642
我之间注意到的一个区别是:
还有这个:
如果在任何一种情况下你都有:
那么对于第一个例子,
act2
将在act1
之前运行,而在第二个例子中,它将是另一种方式 .