Javascript协议和事件

Javascript协议和事件,javascript,Javascript,下面的代码是什么意思- <a href="javacsript:;" onClick="addItem(160)">some link</a> 我的基本疑问是,当我们点击链接时,哪个脚本会运行,onclick将首先运行。如果onclick没有返回false(在本例中它没有返回),则href将被处理。您的疑问是真的!,您必须在javascript文件中找到“function addItem(x)”,该文件通过页面上的脚本标记链接。(通常在head标记中)href中的“

下面的代码是什么意思-

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


我的基本疑问是,当我们点击链接时,哪个脚本会运行,
onclick将首先运行。如果
onclick
没有返回
false
(在本例中它没有返回),则
href
将被处理。

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

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

例如,此行将显示一个带有“testing”消息的消息框


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

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

onclick是一个在单击链接时也会触发的事件。与href不同的是,它不允许您添加指向不同页面的链接;它只接受javascript

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

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


回答你的问题;这两个脚本都将执行,但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 href='javascript:getLink()'>Click to go there!</a>
如您所见,该函数获取页面上
元素的当前选定值,并返回该值。
元素看起来像什么

<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返回一个值,所以浏览器会将该值理解为新页面内容


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

以及处理href时将调用什么脚本?在您的示例中,将处理内联JavaScript(
JavaScript:;
)。如果href是一个常规URL,浏览器将只导航到它。什么都没有。作者可能认为,如果onclick没有返回false,那么这是防止锚点推送到另一个页面的好方法。您还会经常看到javascript:void()。实际上,最好确保onclick事件返回false,如果返回false,则确保href推送到某种回退。或者,根本不使用锚定标记。
href=“javascript:;”
是非操作。这是一个空的javascript调用。实际上,在您的示例中,
addItem
返回什么并不重要。如果是
onclick=“return addItem(160)”
,则
addItem
的返回值将影响是否处理
href
。函数addItem位于其中一个脚本文件中。我怀疑如果addItem返回false会发生什么?不是那么简单,@Luc!!看看如果脚本实际返回一个值会发生什么!
  function getLink() {
    var sel = document.getElementById('sel');
    return sel.options[sel.selectedIndex].value;
  }
<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>