2011-12-23 57 views
-4

我想做一個簡單的插件,所以當用戶點擊照片時,他會得到一張更大的照片(因爲所有的照片都比真實的小)。而我的問題是,當用戶點擊bodyhtml時,如何關閉這張較大的照片,但如果在照片上點擊它,它不應該關閉它?它大概應該是這樣的:獲取ID或點擊對象的類別

$('body, html').click(function() { 

    if(clickedOnPhoto) 

     //do nothing 

    else 

    //close the photo 

}) 
+0

@ amnotiam:他希望獲得點擊目標的id,並在調整大小之前檢查它是否是放大的圖像。 – Purag 2011-12-23 21:56:56

回答

2

而不是檢查什麼的目標是和決定做什麼;你可以添加一個click事件處理程序document元素關閉大照片和添加click事件處理程序到大的照片,停止click事件的傳播,因此不會達到document元素:

$('#photo-container').on('click', '.big-photo-elements', function (event) { 
    //stop the event from propagating normally so that it does not reach the `document` element 
    event.stopPropagation(); 
}); 

$(document).on('click', function() { 
    //run code to close big photos, this will not be triggered if a user clicks on the big photo 
    $('.big-photo-elements').hide(); 
}); 
+0

+1我認爲'stopPropagation'方法是更好的選擇。簡單和低維護。 – 2011-12-23 22:07:52

+0

@Jasper:其實我更喜歡這種方法。你能解釋一下我寫的東西嗎?不管怎麼說,還是要謝謝你。聖誕節快樂。 – 2011-12-23 22:19:50

0

event.target會給你被點擊的葉最元素。你可以把它包裝成$()執行任何類/屬性檢查你通過jQuery

6

嘗試這樣的:

$(document).click(function(e){ 
    var id = e.target.id; // get the id attribute of the target of the click 
    if(id === 'yourDivId') { 
     // photo was clicked 
    } else { 
     // something else was clicked 
    } 
}); 
+0

太棒了,class而不是id呢? – 2011-12-23 21:57:47

+0

使用'e.target.className'。 – Purag 2011-12-23 21:58:21

+0

你的意思是'e.target.className',它返回一個包含class屬性的字符串(如果有多個類,通常是空格分隔的) – Paulpro 2011-12-23 22:01:38