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>