2010-06-05 72 views
5

是什么下面的代码的意思是 -的Javascript协议和事件

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

我的基本疑问是脚本,当我们点击链接

回答

3

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

+0

以及在处理href时将调用哪些脚本? – ayush 2010-06-05 05:41:16

+0

在您的示例中,将处理内联JavaScript('javascript:;')。如果href是一个普通的URL,浏览器就会导航到它。 – Matt 2010-06-05 05:42:12

+0

没有。作者可能认为,如果onclick不返回false,这是防止锚点推向另一个页面的好方法。您还会看到很多javascript:void()。实际上最好确保onclick事件返回false,如果没有,请确保href推到某种类型的后备。或者,根本不要使用锚标签。 – Andrew 2010-06-05 05:45:15

0

您的疑问是真实的,你必须找到“功能的addItem(X)”中,通过从页面脚本标签链接(通常在头标记)的JavaScript文件

+0

函数addItem存在于其中一个脚本文件中。我的疑问是,如果addItem返回false会发生什么? – ayush 2010-06-05 05:51:56

0

的“的javascript:”。里面的href是一种告诉浏览器执行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脚本不会执行任何操作。

+0

不是那么简单,@Luc!看看脚本实际返回值会发生什么! – Pointy 2010-06-05 11:57:56

2

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

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

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

因此,在您的示例中,当您单击该链接时,浏览器将触发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>

这是否对你有意义?

0

注意,当浏览器解释“的javascript:”一个“HREF”的值,如果返回值不为空那么它被解释为所需的<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; 
    } 

正如所看到的,该函数抓住的当前选择的值3210元素和返回那。 <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返回一个值,因此浏览器将该值理解为新的页面内容。

这是非常令人兴奋的。我不确定为什么你会这样做。