2013-07-30 24 views
0

我google了,但我似乎無法找到任何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> 

但它沒有工作。

+1

只是不要在索引頁中包含腳本。 –

+1

你應該使用'$('body')'而不是'$(body)'(否則'body'被解釋爲變量 – giorgio

+0

你知道你的域名的www。版本不起作用嗎?) – giorgio

回答

0

海量道具@giorgio。

但是,下面的解決方案回答了我的問題。請注意,tumblr的API阻止了@ giorgio's的工作:

{block:PermalinkPage} 
<script type="text/javascript"> 
    $('body').click(function(e) { 
     e.preventDefault(); 
     window.location = "http://speakingwithpictures.com"; 
    }); 
</script> 
{/block:PermalinkPage} 
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,點擊事件被稱爲,你會得到一個警告說「在中間人」。但是事件冒泡到外部div,並且發現附加到該外部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元素。現在我正在做的是遍歷文檔本身(從目標到它的父,到它的父,等等,將正文傳遞給文檔)。當一路上找到類'.do-not-go-to-gome'的元素時,它存儲在find參數中。

現在在if子句中,您可以檢查是否沿着這個類的發現方式(find.length應該是零),或者如果目標本身擁有那個類。爲什麼?如果你點擊某個類別的「不要去家裏」的div,它的父母之一可能會執行事件處理程序。我們現在已經解決了這個問題。

唯一需要注意的是選擇器中的小snipper :not(.homepage)。這將確保該事件附加到每個身體元素(其中只有一個),該類別不屬於homepage。因此,在您的主頁上,請確保您的身體標記如下所示:<body class="homepage">。當然也可以使用其他方法來區分主頁和其他頁面。

玩得開心!

原始回答
那麼,只需將點擊事件附加到身體。並添加一個班級或做其他事情來確定它是否是首頁。這樣做:

$('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/

+0

仍然沒有運氣。如果你去http://speakingwithpictures.com jquery只是強制頁面重新加載。我想要做的是,當有人在像http://speakingwithpictures.com/post/56865487613這樣的帖子時,它將他們帶回家。 – Michael

+0

如果您在任何頁面中包含小提琴的片段,它將引導用戶訪問主頁(如果您更改了url的url))。在主頁本身,你應該將主頁類添加到body元素,如下所示:''。這確保重定向的部分不被執行。或者你可以只在加載頁面(而不是主頁)上加載JavaScript。我無法在您的網站上找到腳本或正文類,但... – giorgio

+0

對不起腳本上傳。儘管如此,當我嘗試點擊一個帖子,它只是重新加載頁面。我需要將「主頁」更改爲任何內容嗎? – Michael

0

在這些線路上的東西:

$('document').on("click", function() { 
    if ($(this).href != "homepage") { 
     window.location = "homepage"; 
    } 
}); 
2
var home = "http://www.example.com/index"; 

$('body').click(
function(e) 
{ 
    e.preventDefault(); 
    if (window.location.href!=home) 
    { 
    window.location = home; 
    } 
}); 
+0

無法讓這個工作。我已經更新了我的q。 – Michael

+0

應該是'$('body')'('body'被解釋爲一個變量) – giorgio

+0

@Michael只是在'body' –

相關問題