![](/img/trans.png)
[英]How can I add "href" attribute to a link dynamically using JavaScript?
[英]Invoking the HREF attribute of a link with javascript using javascript!
我之前从未见过,但是如果HREF包含javascript:; // code ......;,则可以使用javascript调用链接的HREF属性。
在下面的示例中,单击两个链接。 即使在HREF中使用不同的javascript,它们也会做同样的事情。
例如:
<script type="text/javascript">
function clickme()
{
var link = document.getElementById("clickme");
eval(link.href);
}
</script>
<a id="clickme" href="javascript:alert('hello');">I will alert hello</a>
<br />
<a href="javascript:clickme()">click me</a>
我在IE8,Firefox 3.6.8,Safari 5.0.1和Chrome 6.0.472.55上进行了测试。 这是标准化的,因此我不必担心将来会弃用此功能吗?
您不必担心将来会弃用它。 这是一个坏主意了 。
真正发生的事情是:有一个使用javascript:
协议的链接,该链接受到浏览器的尊重。 这意味着javascript:
之后的所有内容都是JavaScript,应由JS解释器执行。
当您检索链接的href时,会将其作为字符串接收,例如“ javascript:clickme()”。 您可以对字符串使用eval
来执行JavaScript。 现在,您会认为这会失败(因为前面是javascript:
协议),但是不会,因为JavaScript具有标签,并且当您将其视为JavaScript代码时看起来像标签。
这样就行了,但这是个坏主意。 (由于eval
)在最新版本的JavaScript ECMAScript 5th Edition的新“严格”模式下也不允许这样做。
通常,当我们认为需要对某些东西使用eval
,它表明我们的代码存在问题,并且需要进行一些重构。 该规则的例外是非常边缘的情况,我们大多数人永远都不会遇到。 在这种情况下,而不是在href
属性包含我们要执行的代码,它应该只使用我们要执行的代码。 例如,您的示例仅将clickMe
函数用作函数。 与其eval
,不如直接调用该函数。
它不会被弃用,但我看不到它的用途。
如果您确实想简化这一行,请执行以下操作:
<script type="text/javascript">
function clickme()
{
clicked();
}
function clicked()
{
alert("hello");
}
</script>
<a id="clickme" href="javascript:clicked();">I will alert hello</a>
<br />
<a href="javascript:clickme()">click me</a>
还是更好:
<a href="#" onclick="clicked();">Click Me</a>
甚至更好:
<span onclick="clicked();" class="MakeMeLookLIkeLInk">Click Me</a>
锚定控件主要用于导航,并且作为保持这种状态的一种好习惯。 如果您需要执行某些功能,请在跨度/ div上使用onclick。 您也可以使用按钮。
我想你的问题是线是否
eval(link.href);
已验证。
答案是肯定的。 没有理由不评估存储在某些属性中的代码,就像评估输入框的内容一样。
也就是说,这看起来是一种非常糟糕的编码方式。 如果不小心,可能会陷入循环。 此外,这样的代码将很难维护。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.