2013-03-11 87 views
0

是否有可能僅使div的一部分可點擊 - 就像clickmap/imagemap一樣?可能與jQuery? 提示:我不想編輯html(誤用200個單獨的html文件的模板)。jQuery或任何:可能只使div的一部分可點擊?

+0

這是非常有可能的 - 看看第一個例子:http://www.w3schools.com/tags /tag_map.asp – spots 2013-03-11 13:05:29

回答

5

當您點擊div時,事件處理程序會收到事件,因此您可以測試點擊的位置。

如果需要,您可能需要使用單擊的元素位置和大小,使用$(this).offset(),$(this).width()$(this).height()。例如:

$('mydivselector').click(function(e) { 
    if (e.pageY > $(this).offset().top + 0.5*$(this).height()) { 
      // bottom was clicked 

    } else { 
      // up of the div was clicked 

    } 
}); 

如果要防止默認操作和事件傳播,請從事件處理函數返回false。

+0

您應該展示如何防止對那些不應點擊的區域採取默認操作 – 2013-03-11 13:20:56

+0

這些區域無法獲取操作。問題是,smb。想要標記一個文本,他們是「連續」作爲答題器 – Viktor 2013-03-11 13:39:07

+0

這工作得很好,IE,FF,Safari - 非常感謝你! – Viktor 2013-03-11 15:23:41

0

您可能需要使整個div可點擊,然後通過檢查單擊哪個座標來確定是否要處理該事件。

0

您可以檢查event object上的offsetXoffsetY屬性的值,如果不喜歡它們,則決定不做任何事情。

Example

另外,如果你需要單擊事件並不火,你可以動態地創建額外的透明<div> S和部分地將它們放置在現有元素的面前,讓他們掩蓋了部分你不想回應點擊。

+0

動態div注射對於seo來說是不好的做法,不是嗎? – Viktor 2013-03-11 13:40:00

+1

@Viktor:我不知道,因爲我們所說的divs將會是空的,我不知道它會如何影響seo。 – Jon 2013-03-11 13:43:15

1

你可以嘗試讓所有元素的jQuery選擇,並切一些

var selector = "#mydiv"; 
var numberOfElements = $(selector).find('*').length/2; //It's just an example 

$(selector).find('*').slice(0, numberOfElements).click(function() { 
[....]//do stuff 
}); 
+0

所以我在相同大小的切片中切片這個div?好主意! – Viktor 2013-03-11 13:41:43

+0

不,這只是一個想法,而這只是允許你分割一些元素(HTML標籤)。它不考慮元素的偏移量。在我的例子中,我搜索HTML樹的中間部分。 – JoDev 2013-03-11 14:09:58