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);
}); |
我还能用什么来代替"#"来使我的代码整洁……
- 另一件可以做的事情是不显示当链接悬停时将调用的实际JS函数,而是在状态栏中显示一些文本…
- @斯派克蒂德:根据你对给定答案的评论,我认为你有更具体的要求。您可能想添加到您的帖子中,并具体说明"void(0)"方法不适用于您的原因/方式。
- 副本:stackoverflow.com/questions/134845/&hellip;
- 不要反对重复的问题!
- 不完全是复制品…这是一个相似的…请参阅评论部分…
- @O.K.W:添加代码以供参考…
最好的解决方案是根本不使用虚拟占位符。使用一个有意义的URL,如果链接被实际跟踪,它将向您显示从Ajax请求中获得的信息。
我经常使用我的Web应用程序,使用JavaScript来增强一个工作站点。例如,HTML:
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,这样他们就知道他们要去哪里了。
- 回答得很好……:)
- 它可以工作,但是如果您尝试在validator.w3.org上验证文档,则会出现以下错误:"元素a上的rel属性的错误值popup:字符串popup不是已注册的关键字。"
我通常用这个:
1
| href="javascript:void(0);" |
将锚定的href属性设置为javascript:void(0);表示该锚定不是指向另一个文档或锚定的超链接,
- 大多数地方都有,但一定要去那里。
- 嗨,安得烈……在我的例子中,当用户单击标记时,我调用一个更高级别的Ajax加载函数。使用href="javascript:void(0)"将取消Ajax调用,浏览器将显示"拒绝查看此页面的权限"。
- @Spiketide:你在使用什么浏览器?这个Ajax函数是什么样子的?
- 我的代码在所有主要浏览器中都应该是一样的…我的Ajax函数将包含HTML元素的PHP页面加载到一个分区中。当用户单击页面中已有的某个菜单项时,就会发生这种情况。这些菜单项被创建为无序列表,单击这些列表时,其元素将调用Ajax函数。希望我明白
- 说真的,不要这样做。这里有各种各样的问题,总结得很好:jibbering.com/faq/javascripturi
- 但这使webamaster错误"已禁用对"javascript"uris的访问"
- @提姆down返回错误(正如文章所说)更糟。
- @雨果申克:怎么了?
如果您的onclick处理程序返回false,浏览器将不会跟踪链接。试试这个:
编辑:
如果你绝对不想使用Octothorpe(即#符号),你就不必这样做。试试这个:
- 我正在寻找一种完全不使用""字符的方法…
- @Spikedide:在我的例子中,把你想要的任何东西放到href属性中。其实这并不重要,因为浏览器不会跟随它。
- 但是在click事件中返回false不会调用jquery.click()函数…
- 关闭了javascript浏览器的用户怎么办?周围有很多。对于这样的用户,您应该在EDOCX1中放置一个有意义的回退。
- @蒂姆·唐:实际使用禁用javascript的互联网的人数经常被夸大。事实上,这个数字太小了,以至于谷歌分析甚至不计算这些人(怎么可能呢,它是基于javascript的)。即使是现在的主要机器人也支持JavaScript。无论如何,OP的替代方案(#并不完全代表有意义的回退。
为什么需要在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
- 这是我在FF 3中使用它时得到的警告…火狐不知道如何打开这个地址,因为协议(javascript)与任何程序都没有关联。
- 但如果禁用了javascript,它会工作吗?
- 如果网站打算在禁用javascript的情况下工作,那么使用jquery没有意义…..
- Spikedide——这是javascript:;而不是javacript:;,我也赞成Nickf的回答,因为这是最优雅的解决方案。
- 同样,唯一的解决方案是作为回退的有意义的页面URL。jibbering.com/faq/javascripturi
使用""字符作为占位符基本上使链接"活动"。浏览器将其解释为指向其他内容的标记。如果href为空,浏览器将假定a标记只是另一个标记。
解决这一问题的方法是将一些CSS分配给模拟标记相同功能的不同标记。在鼠标悬停时,更改鼠标、下划线、更改颜色等。您可以轻松地更改窗口状态,使其看起来像用户在单击某个链接,而实际上他们并没有单击某个链接,而是在单击某个事件。
事实上,这是更好的选择,因为在没有javascript的情况下,只通过事件绑定运行JS函数不应该被视为链接。
- 嗨,杰夫……正如本文stackoverflow.com/questions/134845/&hellip;所指出的,键盘选项卡可以访问"A"标记,而另一种方式则使其仅为鼠标元素…我也希望通过键盘访问我的…
- 在这种情况下,我将研究为击键编写事件绑定。另外,我认为您可以使用HTML中的taborder属性(或类似的属性)允许用户标记到特定的元素。不确定它是否适用于所有事情。我从没试过。在这种情况下,键盘访问有什么好处?
- 另外,可以将定位点指向任何类型的URL,但确保onclick事件处理程序返回false。这将阻止气泡通过,并且永远无法访问链接。但是,如果用户禁用了javascript,这将使您能够进行变通。
- 键盘访问只是为了可用性…链接使用在菜单中,如果用户只能使用tab键导航到它,那么它将是可取的…
- 使用TabDe指标。我认为浏览器默认使用锚定和表单元素,但您可以在那里添加自己的选项。w3.org/tr/html401/interaction/forms.html h-17.11-这可以让您快速了解tabindex,并可能对您的情况有所帮助。一定要使用return false;要停止冒泡,这样链接就不会真正触发,只会触发click事件。
- 您也可以使用window.status更改状态栏显示的内容。
- 谢谢你的提示,杰夫……现在看看……