点击任何地方回家?

时间:2013-07-30 09:12:04

标签: jquery

我用谷歌搜索但我似乎找不到任何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>

但它没有用。

4 个答案:

答案 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}