如何从定义的函数中选择单击的链接
How can I select the clicked link from a defined function?
我正在构建一个AJAX可导航站点(代码取自CSS-Tricks(,它在标记中使用常规链接,但通过.js将它们替换为哈希链接。
我不希望用户能够单击只会重新加载相同内容的链接。因为我使用的是哈希,所以对于主页以外的任何页面(首次加载时(,此问题会自行解决(如果用户单击当前 URL 哈希的哈希链接,则没有任何反应(。
我有一个解决方案,直到我将其定义为函数(因为我需要重用它(。它使用 $(this( 来获取已单击的链接,如果指向当前页面,则返回 false。但是,现在这将返回窗口(作为数组对象(而不是单击的链接。
如何选择点击的链接?
// Use hashes instead of reloads to navigate the site.
function initiateHashNav(linkContainers) {
var $this = $(this);
$(linkContainers).delegate('a', 'click', function() {
// Restrict clicking on link for current page.
if ($this.attr('href') == window.location.href) {
return false;
} else {
// The hash shouldn't contain window.location (clean URLs are happy URLs!).
window.location.hash = $this.attr('href').substr(window.location.origin.length);
return false;
}
});
}
只需将$this
声明移动到正确的范围内,如下所示:
function initiateHashNav(linkContainers) {
$(linkContainers).delegate('a', 'click', function() {
var $this = $(this);
// Restrict clicking on link for current page.
if ($this.attr('href') == window.location.href) {
return false;
} else {
// The hash shouldn't contain window.location (clean URLs are happy URLs!).
window.location.hash = $this.attr('href').substr(window.location.origin.length);
return false;
}
});
}
JavaScript中的每个函数都是一个作用域。中的每个作用域都有一个上下文 (this(,如果未设置上下文,则窗口对象将成为上下文。
jQuery.fn.delegate 将匹配的元素设置为事件处理程序中的上下文,因此this
是委托事件处理程序中的 HtmlAncherElement。但是在函数initiateHashNav
之外没有设置上下文,所以它只是窗口对象
相关文章:
- 检测页面上某个元素中选择(突出显示)或单击的内容
- AngularJs列表ng单击以选择选项转换
- Javascript对象类在单击时打开窗口进行颜色选择,并在更改时替换对象背景颜色
- OpenLayers在悬停时高亮显示功能,并在单击时选择
- 单击时选择2(未选中),显示加载微调器javascript
- 单击OPTGROUP后选择所有子元素
- 如何改变“;尺寸“;单击选择时的选择
- 选择了多个用javascript单击的项目
- 单击选项卡时jquery选项卡选择不起作用
- casperjs-css选择器存在,但当单击它时会引发“”;CasperError:无法在不存在的选择器“”上调度mou
- 如何触发 HTML 选择单击事件(使用选项激活选择下拉列表)
- 从选项选择单击时打开 2 个 URL
- 如何从定义的函数中选择单击的链接
- 选择单击的图元,而不是其父图元
- 如何知道用户何时取消选择文本,如果在以前的活动选择单击
- 根据eq()选择单击事件
- 如何按类选择单击元素的子元素
- 共享IE7中的此问题-无法选择/单击弹出表单下方的任何内容
- 角度 JS,选择单击不调用
- JS循环并选择单击以外的其他输入