繁体   English   中英

Javascript协议和事件

[英]Javascript protocol and events

以下代码的含义是什么 -

<a href="javacsript:;" onClick="addItem(160)">some link</a>

我的基本疑问是当我们点击链接时运行哪个脚本

onclick将首先运行。 如果onclick没有返回false (在这种情况下它没有),则将处理href

href属性中的javascript部分是协议(您知道,如http,ftp或mailto)。 它的作用是告诉浏览器URL实际上是JavaScript代码。

通常,当您单击链接时,浏览器将执行它在href属性中找到的任何内容。 但是,浏览器还会处理href 之前触发onclick事件。 因此,设置onclick处理程序将覆盖正常行为。

因此,事件处理程序成为王者,它有可能通过返回true (允许)或false (阻止)来允许或阻止默认的浏览器行为。

因此,在您的示例中,当您单击该链接时,浏览器将触发addItem 如果它返回false ,则没有任何反应。 如果返回true ,浏览器将执行href属性中的代码。 但由于它没有找到任何语句(即空语句),所以没有任何反应。

请尝试以下代码:

<a href="http://google.com/" onclick="return false;">won't go to google.com</a>
<a href="http://google.com/" onclick="return true;">will go to google.com</a>

这对你有意义吗?

请注意,当浏览器解释“href”的“javascript:”值时,如果返回值不为空, 则将其解释为<a>标签所需的文档内容! 这是一个供您欣赏的测试页:

http://gutfullofbeer.net/jslink.html

该页面的来源(查看它;它真的很短)包括以下链接:

<a href='javascript:getLink()'>Click to go there!</a>

函数“getLink()”定义如下:

  function getLink() {
    var sel = document.getElementById('sel');
    return sel.options[sel.selectedIndex].value;
  }

如您所见,该函数获取页面上<select>元素的当前选定值并返回该值。 <select>元素是什么样的?

<select id='sel'>
  <option value='<html><head><meta http-equiv="refresh" content="2;http://cnn.com"/></head><body>Redirecting to CNN ...</body></html>'>CNN</option>

  <option value='<html><head><meta http-equiv="refresh" content="2;http://zombo.com"/><head><body>Redirecting to Zombocom ...</body></html>'>Zombocom</option>
  <option value='<html><head><meta http-equiv="refresh" content="2;http://reddit.com"/></head><body>Redirecting to Reddit ...</body></html>'>Reddit</option>
</select>

这些选项的值是具有重定向到所请求站点的页面的完整HTML标记。 因为URL返回一个值,所以浏览器将该值理解为新的页面内容。

这真是令人兴奋。 我不知道你为什么要这样做。

你的疑问是真的!你必须在一个javascript文件中找到“function addItem(x)”,该文件通过页面中的脚本标签链接。(通常在head标签中)

href中的“javascript:”是一种告诉浏览器执行javascript而不是转到不同页面的方法。

例如,该行将显示带有“测试”消息的消息框。

<a href="javascript:alert('testing');">Click me</a>

这个将执行一个空的javascript语句,什么都不做

<a href="javacsript:;">Click me</a>

onclick是一个在点击链接时也会触发的事件。 与href相比,它不允许您放置到不同页面的链接; 它只接受javascript。

浏览器将首先触发onclick事件,然后处理href属性。 如果它是一个URL(空href表示当前URL;单击将只刷新页面)它将跟随它,如果它是javascript它将执行它。

放“javascript:;” 或“javascript:void(null);” 内部href是一种古老而错误的技术,以确保浏览器在处理onclick后不会刷新页面。

回答你的问题; 两个脚本都将执行,但href脚本将不执行任何操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM