2009-12-21 27 views
0

首先感謝您的考慮。jquery不是選擇器問題

我有一個包裝(容器)內的HTML文件。我想這樣做,當有人點擊頁面的正文部分時,它們被重定向到xxx,但是如果他們點擊包裝器(頁面的內容),它們不會被重定向。我已經嘗試了一切,但用於$('body')的jquery選擇器選擇了正文內的所有內容,而且我似乎無法理解如何選擇不在#wrapper中的所有內容。 我是想這樣的事情:

$('*').not('#wrapper').click(function(){ 
      window.location = 'http://www.example.com/example-page'; 
     }); 

,沒有運氣,

謝謝你們

Alex_

+0

可能應該是:'$('body> *')。not('#wrapper')' – 2009-12-21 20:33:59

回答

0

大概是這樣的..

$(document).click(function(e){ 
    var el = $(e.target); 
    if ( 
     (!$(el).is('#wrapper')) && 
     $(el).closest('#wrapper').length === 0 
    ) { 
     window.location.href = 'http://msn.com'; 
    } 
}); 

沒考。儘管如此,我不會推薦這種做法,這種侵入性和奇怪的行爲。

+0

我試過了,並沒有工作。謝謝 – Alex 2009-12-21 20:46:41

+0

真的嗎?你確定?我只是用'.container'而不是'#wrapper'在stackoverflow上測試它,它似乎工作。你可以搭起一個測試頁面嗎? – 2009-12-21 20:49:40

+0

順便測試一下,如果可以的話在你的#wrapper周圍放一個邊框,並確保它包含浮動塊。 – 2009-12-21 20:51:22

-1

也許嘗試使用過濾功能。它允許您去除元素集中不需要的結果。

http://docs.jquery.com/Traversing/filter

+0

我試過這個,看起來很有希望......但最後它只是過濾整個事情。所以它沒有重定向。感謝芽。 – Alex 2009-12-21 20:51:49

1
$('*').not('#wrapper').click(function(){ 
      window.location = 'http://www.merkados.com/quote-request'; 
    }); 

將事件綁定到除#wrapper指定的所有元素。所以,如果你的html是

<div id="anotherdiv"><div id="wrapper">adsads</div></div> 

#anotherdiv會收到點擊adsads。您可以使用stopPropagation()事件

+0

我認爲這可能會工作,如果我更好地理解stopPropagation()方法...我將研究它。謝謝 – Alex 2009-12-21 20:47:26

0

我想你想用這個:

$(':not(#wrapper)').click(function(){ 
    window.location = 'http://www.example.com/example-page'; 
}); 
+0

難道還不能解決#wrapper的小孩嗎?並不會因爲它在多個元素上附加click事件處理程序而導致效率低下? – 2009-12-21 20:50:45

+0

我同意邁德,這個選擇了很多東西...雖然 – Alex 2009-12-21 20:54:10

1

不stopPropagation()在IE口味工作?也許,最終使用舊的「回報錯誤」會阻止事件到達其他地方。

此外,一些奇怪的代理檢查-already可用的JQuery-應該做的。 (如果MSIE,然後做

event.cancelBubble = true; 

否則,使用stopPropagation方法

event.stopPropagation(); 

+0

嗯,現在,我將不得不去IE瀏覽器版本...但是,謝謝... – Alex 2009-12-21 21:04:38

0

我做的傢伙! 非常感謝您打開我的眼睛!你們做到了! 下面是最終代碼:

$(':not(#wrapper)').click(function(event){ 
      if($(this).hasClass('cl')) { 
       window.location = 'http://www.example.com/example-page'; 
      } 
       event.stopPropagation(); 

     }); 

正如你可以看到我做的是我添加了一個類隻身體。 stopPropagation基本上停止了#wrapper的調用,所以它基本上只能用於擁有cl而不是#wrapper的任何部分。

再次感謝,你們搖滾!

+0

你可以提供標記?我仍然不明白爲什麼我的工作不起作用 – 2009-12-21 23:38:26

2

由於事件冒泡起來,您應該可以將一個點擊事件附加到封裝器,以便將氣泡消除到正文。之後,您可以將一個單擊事件附加到body元素以將您需要的地方重定向到。這隻會將點擊事件綁定到2個元素。

$("#wrapper").click(function(){ 
    return false; 
}); 

$("body").click(function(){ 
    console.log("body click"); 
});