我用谷歌搜索但我似乎找不到任何jquery;当用户点击它将它们带到索引的任何地方时。例如,如果用户在某个项目上但想要回家,他们可以点击任何地方,然后将其带回家。
但是,当用户在主页上时,不应该应用相同的jquery吗?
我正在尝试实施的网站是here我尝试实施@jonathanchow回答:
<script type="text/javascript">
var home = "http://www.speakingwithpictures.com";
$(body).click(
function(e)
{
e.preventDefault();
if (window.location.href!=home)
{
window.location = home;
}
});
</script>
但它没有用。
答案 0 :(得分:3)
我修改了代码check it out here。我相信这是你需要的,或者至少非常接近它,你应该能够根据你的需要量身定做。
要了解正在发生的事情,首先您需要了解事件冒泡(或传播)的工作原理。我们正在使用jQuery,所以我只会解释jQuery如何处理它(它几乎和大多数浏览器一样)。
当某个元素发生事件时,将为该特定事件调用事件处理程序。但是(!)事件也会“冒泡”DOM树并执行附加到它找到的元素的所有事件处理程序。示例fiddle here:
<div class="outer">
<div class="in-the-middle">
<div class="inner">
</div>
</div>
</div>
<script type="text/javascript">
$('div').on('click', function(e) {
alert($(this).attr('class');
});
</script>
现在,如果您单击中间div,则会调用click事件,您将收到一条“中间”警报。但事件冒泡到外部div,并发现一个附加到那个的点击事件,所以另一个警告说“外部”也会弹出。如果你点击外面的那个,只会喊出“外部”,当点击内部时,所有三个都会被警告。
现在回到你的问题。我之前给出的代码(在this fiddle中)的问题在于它没有足够好地遵循这个原则。现在看看上面新小提琴中的代码,看看以下几行:
var target = $(e.target);
var find = target.parents('.do-not-go-to-home');
if(!target.hasClass('do-not-go-to-home') && find.length <= 0) {
...
}
在第一行中,您会看到e.target
。变量e
只是事件,传递给事件处理程序。目标是事件首次发生的DOM元素,或触发事件的DOM元素。现在我正在做的是遍历文档本身(从目标到它的父级,到它的父级,依此类推,将正文传递给文档)。在找到类“.do-not-go-to-gome”的元素时,它会存储在find参数中。
现在在if子句中,您可以检查是否一直找到此类(find.length应为零),或者目标本身是否具有该类。为什么?如果你单击一个带有'do-not-go-home'类的div,那么其中一个父母可能正在执行事件处理程序。我们现在已经解决了这个问题。
唯一需要注意的是选择器中的小剪切器:not(.homepage)
。这将确保事件附加到每个body元素(其中只有一个)不属于类homepage
。因此,在您的主页上,请确保您的正文标记如下所示:<body class="homepage">
。其他方法也可以将主页与任何其他页面区分开来。
玩得开心!
原始回答
好吧,只需将click事件附加到正文。并添加一个类或做其他事情来确定它是否是主页。做点什么:
$('body').on('click', function(e) {
e.preventDefault();
if(!$(this).hasClass('homepage')) {
window.location.href = 'http://myhomepage.com';
}
} );
修改强> 啊哈!你的问题有点扩展了。所以你希望用户点击任何地方回家,除了某些div(例如你的图像)。在这种情况下,只需添加一个过滤器。
<div class="do-not-go-home">content</div>
$('body').on('click', 'div:not(.do-not-go-home)', function(){});
在这里查看小提琴:http://jsfiddle.net/KKY4T/1/
答案 1 :(得分:2)
var home = "http://www.example.com/index";
$('body').click(
function(e)
{
e.preventDefault();
if (window.location.href!=home)
{
window.location = home;
}
});
答案 2 :(得分:0)
这些方面的东西:
$('document').on("click", function() {
if ($(this).href != "homepage") {
window.location = "homepage";
}
});
答案 3 :(得分:0)
@giorgio的大量道具。
然而,下面的解决方案回答了我的问题。请注意tumblr的API阻止了@ giorgio的工作:
{block:PermalinkPage}
<script type="text/javascript">
$('body').click(function(e) {
e.preventDefault();
window.location = "http://speakingwithpictures.com";
});
</script>
{/block:PermalinkPage}