我想将一些 Ajax 排序选项添加到列表中。由于到目前为止我的网站在没有 JavaScript 的情况下运行,我想让它为关闭它的人、旧/移动浏览器或 noscript 运行。
如果启用了 JavaScript,我如何在单击链接时运行 JavaScript 块,如果未启用,则让该链接将浏览器定向到新页面。我想远离 hacky noscript 标签。
我想将一些 Ajax 排序选项添加到列表中。由于到目前为止我的网站在没有 JavaScript 的情况下运行,我想让它为关闭它的人、旧/移动浏览器或 noscript 运行。
如果启用了 JavaScript,我如何在单击链接时运行 JavaScript 块,如果未启用,则让该链接将浏览器定向到新页面。我想远离 hacky noscript 标签。
您的链接需要指向替代非 JavaScript 页面的有效 href 值,并且在您的点击事件中,您需要返回 false,以避免启用 JavaScript 的浏览器跟随链接:
<a id="aboutLink" href="about-us.html">About Us</a>
$('#aboutLink').click(function () {
// ajax content retrieval here...
return false; // stop the link action...
});
我会使用preventDefault
:
$('a').click(function(e) {
e.preventDefault(); //stop the browser from following
$('#someDiv').load('content.php');
});
<a href="no-script.html">Load content</a>
如果没有 Javascript,则将遵循 HREF。
我想您可以将新页面的 URL 放在 HREF 中,并从 onClick 事件处理程序返回 false 以停止获取链接。如果未启用 JS,则不会运行 onClick,这意味着将遵循 HREF。
为了很好地分离关注点,最好的办法是使用 attachEvent (IE) 或 addEventListener (standard)(或对您隐藏的工具包,如 Prototype、jQuery、MooTools、YUI、Glow 等),然后取消JavaScript 中的事件。假设这个链接:
<a href='foo' id='mylink'>Link text</a>
...这是使用原型的示例:
// Hook up your handler on page load
document.observe("dom:loaded", function() {
// Look up the link, apply your handler
$('mylink').observe('click', yourHandler);
});
// Your handler:
function yourHandler(event) {
// Prevent the default action
event.stop();
// ...your code here...
}
您不必为链接分配 ID,有很多方法可以找到除 ID 之外的 DOM 元素,但它是一个方便的示例。
jQuery 等。al.,将有自己的 event.stop() 版本,但归结为取消事件。
我会简单地写下没有 JavaScript 时的 HTML,然后修改内容,使其在启用 JavaScript 时的样子。
如果启用了 JS,网站可能会加载得慢一点,并且在构建时可能看起来有点奇怪,但功能仍然存在。如果 JS 被禁用,该站点将保持原样并可供非 JS 用户访问