2009-12-09 70 views
35

Possible Duplicate:
Href for Javascript links: “#” or “javascript:void(0)”?替代品在href属性

<a>标签用于创建超链接,但在这个年龄段的jQuery和Ajax的,我们都用它来HTML载入<div> S IN的同一页<a>标签使用“#”。

这就是说,我们设置href属性附加伤害为href="#",使用或滥用而在#字符作为一个占位符与一些不良的副作用如URL与#角色越来越追加一起。

如果你离开href属性留空href = "",链接似乎并没有工作。

有没有办法以更简洁的方式来做到这一点,比如当用户将鼠标悬停在链接上并且让链接执行程序员的目标时,在浏览器的状态栏中显示一些文本或虚拟功能?

这是我的代码。

<ul id="sidebarmenu1"> 
    // List that is converted into a menu... 
    <li> <a href="#" id="loadHotel" > HOTEL </a> </li> 
    <li> <a href="#" id="loadCountry"> COUNTRY </a> </li> 
    <li> <a href="#" id="loadCity"> CITY </a> </li> 
</ul> 

// The jQuery to load content into another div with Ajax 
var loadUrl = "createHotel.php"; 
$("#loadHotel").click(function() { 
    $("#mainContent").html(ajax_load).load(loadUrl); 
}); 

// ajax function to load hotel ---> rooms page 

var url_loadRooms = "viewRooms.php"; 
$("#createRooms").click(function() { 
    $("#mainContent").html(ajax_load).load(url_loadRooms); 
}); 

我可以用别的什么,而不是"#"使我的整齐..?

+0

可以做,没有显示实际的JS功能,当链接悬停将被调用,但显示在状态栏上一些文字的另一件事.... – SpikETidE

+0

@SpikETidE:根据您对给定答案的评论,我认为您有更具体的要求。你可能想添加到你的文章,并确切地指定为什么/如何“无效(0)”方法不适合你。 –

+0

Duplicate:http://stackoverflow.com/questions/134845/href-for-javascript-links-or-javascriptvoid0 –

回答

41

最好的解决方法是不使用一些虚拟的占位符的。使用一个有意义的URL,如果实际遵循该链接,则会显示您从AJAX请求中获得的信息。

我经常使用我的网络应用程序执行此操作,使用Javascript来增强工作网站。例如,HTML:

<a href="https://stackoverflow.com/users/index" rel="popup">View users</a> 

的JavaScript(jQuery的):

$('a[rel*="popup"]').click(function() { 
    loadPopup({ // whatever your favourite lightbox is, etc.. 
     url: this.href 
    }); 
    return false; 
}); 

这样做的好处是多方面的。您的网站可以通过屏幕阅读器,网络抓取工具和关闭javascript的用户访问,甚至那些打开javascript的用户也可以在他们的状态栏中获得一个有意义的URL,以便他们知道他们要去哪里。

+0

绝妙的答案.. :) –

+1

它的工作原理,但如果你尝试在https://validator.w3.org验证文件,你会得到这个错误:“坏值属性相对于元素弹出a:字符串弹出不是注册关键字。“ –

15

我通常使用这样的:

href="javascript:void(0);" 

设置锚的href属性javascript:void(0);指示浏览器,这个锚是不是超链接到另一个文档或锚,

+1

大多数地方做,但* *的东西有去那里。 – Moshe

+0

嗨安德鲁... 在我的情况下,当用户点击标签时,我会调用更高级别的ajax加载函数。使用href =“javascript:void(0)”取消ajax调用,并且浏览器显示“Permission Denied to view this page”。 – SpikETidE

+0

@SpikETidE:您使用的是哪种浏览器?这个AJAX函数是什么样的? –

0

使用“#”字符作为占位符基本上使链接“活跃”。浏览器将其解释为指向其他内容的标签。如果href为空,那么浏览器将假设一个标签只是另一个标签。

解决方法是将一些CSS分配给模拟标签相同功能的不同标签。悬停时,更改鼠标,下划线,更改颜色等。您可以轻松更改窗口状态,并使其看起来像用户正在点击某个链接,但实际上,他们并未单击链接以至于发出点击事件。

事实上,这是更好的选择,因为通过事件只运行一个JS功能绑定,不能没有JavaScript的使用不应该被认为是第一位的链接。

+0

嗨杰夫... 正如在这篇文章中指出的 http://stackoverflow.com/questions/134845/href-for-javascript-links-or-javascriptvoid0 “a”标签可以通过键盘选项卡访问而另一种方式使它只有一个鼠标元素...我想我的键盘也可以访问... – SpikETidE

+0

在这种情况下,我会考虑编写一个键盘事件绑定。另外,我认为你可以在HTML中使用taborder属性(或类似的东西)来允许用户选择一个特定的元素。不知道它是否适用于一切。我从来没有尝试过。 在这种情况下键盘访问有什么好处? –

+0

另外,您可以将锚点指向任何类型的URL,但要确保onclick事件处理程序返回false。这将阻止泡沫通过,链接永远不会被访问。但是,如果用户禁用了JavaScript,这将使您有能力制定解决方法。 –

4

如果您onclick处理器返回false,链接不会得到其次是浏览器。试试这个:

<a href="#" onclick="alert('No # in the address bar!'); return false;">Click Me</a> 

编辑:

如果你在不使用井号(即#符号)绝对背水战,你不必。试试这个:

<a href="" onclick="alert('No change in the address bar!'); return false;">Click Me</a> 
+0

我正在寻找一种不使用“#”字符的方法.... – SpikETidE

+0

@SpikETidE:把任何你想要的在我的例子中的'href'属性中。它实际上并不重要,因为浏览器不会遵循它。 – Asaph

+0

但在click事件中返回false将不会调用jquery .click()函数... – SpikETidE

0

我总是用这样的:

<a href="javascript:;">Click to your heart's delight</a>

+0

这是当我在FF 3中使用它时得到的警报... Firefox不知道如何打开此地址,因为协议(javacript)不与任何程序关联。 – SpikETidE

+0

但它会工作,如果JavaScript被禁用? –

+0

使用jquery没有意义,如果该网站旨在使用JavaScript禁用..... – SpikETidE

0

也许我没有沾沾自喜,但如果没有链接,你就不应该首先使用< a />元素。使用一些< span />或附加事件监听器来列出元素。您可以将这些元素设置为使用CSS的cursor: pointer;

请记住,浏览器有一些与链接相关的特殊操作,如“在新选项卡中打开”,“保存目标元素”等。当您使用虚拟href=''属性时,这些操作以破碎的方式工作,所以最好不要使用链接。另一方面,如果您能够将这些混杂部分的内容作为普通页面呈现(并且有意义),请按照nickf's advice的说法进行操作。

2

为什么需要在href中定义任何内容?

那怎么SO工作=>

<a id="close-question-1871874" title="closes/opens question for answering...."> 
    close<span title="3 more vote(s) needed to close this question"> (2)</span> 
</a> 

但是 - 如果链接应该实际浏览的地方 - 保持正常的href
,只是e.preventDefault()常规行为与jQuery。

1

nickf打败我吧;但是,应该提及一些事情。 You should never use the "javascript" protocol for a link(除非您打算将它作为书签)。这与渐进式增强相反。只要有可能,href属性应该是一个真正的URI资源,以便它可以正常降级。在所有其他情况下,鼓励使用“#”,并且应该使用正确的JavaScript来防止页面滚动到顶部。有两种方法可以这样做。在点击处理程序中,要么阻止默认操作,要么返回false。

$('a[rel*="popup"]').click(function(e) { 
    e.preventDefault(); 
    loadPopup({url: this.href}); 
}); 

$('a[rel*="popup"]').click(function() { 
    loadPopup({url: this.href}); 
    return false; 
});