关于javascript:在href属性中使用“#”的替代方法

Alternatives for using “#” in href attribute

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Href for Javascript links: “#” or “javascript:void(0)”?

标记用于创建超链接,但在jquery和ajax时代,我们使用它将HTML加载到中,与标记位于同一页中。

也就是说,我们将href属性设置为href="#",使用或更确切地说,滥用#字符作为占位符,以及一些不良的副作用,例如URL附加#字符。

如果将href属性留空href="",链接似乎不起作用。

是否还有更清晰的方法来完成这项工作,比如当用户将鼠标悬停在链接上,但却让链接按照程序员的意图执行时,在浏览器的状态栏中显示一些文本或虚拟函数?

这是我的密码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<ul id="sidebarmenu1">
   // List that is converted into a menu...
   
<li>
  HOTEL  
</li>

   
<li>
  COUNTRY  
</li>

   
<li>
  CITY  
</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);
});

我还能用什么来代替"#"来使我的代码整洁……


最好的解决方案是根本不使用虚拟占位符。使用一个有意义的URL,如果链接被实际跟踪,它将向您显示从Ajax请求中获得的信息。

我经常使用我的Web应用程序,使用JavaScript来增强一个工作站点。例如,HTML:

1
View users

javascript(jquery):

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

这样做的好处是很多的。当javascript关闭时,屏幕阅读器、网络爬虫和用户都可以访问您的网站,即使那些打开了javascript的用户也会在状态栏中得到一个有意义的URL,这样他们就知道他们要去哪里了。


我通常用这个:

1
href="javascript:void(0);"

将锚定的href属性设置为javascript:void(0);表示该锚定不是指向另一个文档或锚定的超链接,


如果您的onclick处理程序返回false,浏览器将不会跟踪链接。试试这个:

1
Click Me

编辑:

如果你绝对不想使用Octothorpe(即#符号),你就不必这样做。试试这个:

1
Click Me


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

就是这样工作的=>

1
  close<span title="3 more vote(s) needed to close this question"> (2)</span>

但是-如果链接应该实际导航到某个地方-保持正常的Href并且只使用jquery执行e.preventdefault()常规行为。


尼克打了我一顿,不过,有几件事要提。你不应该为链接使用"javascript"协议(除非你想让它成为书签)。它与渐进增强相反。只要可能,href属性应该是一个实际的URI资源,这样它就可以正常降级。在所有其他情况下,""是鼓励和适当的javascript应该使用防止页面滚动到顶部。有两种方法可以做到这一点。在单击处理程序中,要么阻止默认操作,要么返回false。

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

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

也许我没有得到smething,但是如果没有链接,您就不应该首先使用元素。使用一些或将事件侦听器附加到列表元素。您可以将这些元素设置为使用css的cursor: pointer;

请记住,浏览器有一些与链接相关的特殊操作,如"在新选项卡中打开"、"保存目标元素"等。当您使用虚拟href=''属性时,这些操作的工作方式是中断的,因此最好不要使用链接。

另一方面,如果你能够将这些未加修饰的部分的内容呈现为普通的页面(这是有意义的),请遵循nickf的建议。


我总是用这个:

Click to your heart's delight


使用""字符作为占位符基本上使链接"活动"。浏览器将其解释为指向其他内容的标记。如果href为空,浏览器将假定a标记只是另一个标记。

解决这一问题的方法是将一些CSS分配给模拟标记相同功能的不同标记。在鼠标悬停时,更改鼠标、下划线、更改颜色等。您可以轻松地更改窗口状态,使其看起来像用户在单击某个链接,而实际上他们并没有单击某个链接,而是在单击某个事件。

事实上,这是更好的选择,因为在没有javascript的情况下,只通过事件绑定运行JS函数不应该被视为链接。