2013-12-11 43 views
1

如何判斷一個元素是否被jQuery點擊?確定一個元素是否被點擊?

喜歡的東西$('.ele').is(':clicked');

我堅持用jQuery 1.7.2,而我所要做的是迫使一些調式元素的結束,在文檔中的任意位置單擊,一個已經打開的時候。

所以我有:

$('body').on('click', function() { 
    if ($('.calc-info').is(':visible') && !$('.mi').is(':clicked')) { 
     $('.calc-info').fadeOut('fast'); 
    } 
}); 

但它拋出一個錯誤,因爲沒有:clicked表達

  • .calc-info是模態
  • .mi是按鈕點擊打開所述模式
+0

你的意思是直接點擊?如果它的後代被點擊了,該怎麼辦?這應該算什麼? –

+0

'.mi'沒有後代,這是一個圖像 – Kevin

回答

2

做它周圍的其他方法,檢查是否點擊的元素(event.target)選擇

$('body').on('click', function (event) { 
    if ($(event.target).is('.ele')) { 
     // do stuff 
    } 
}); 

符合你的情況我會用

$('body').on('click', function (event) { 
    if ($('.calc-info').is(':visible') && 
     !($(event.target).closest('.mi').length) 
     ) { 
      $('.calc-info').fadeOut('fast'); 
    } 
}); 
+0

'$(event.target).is('。ele')'完美運作。 – Kevin

+0

@ o7thWebDesign它會工作,但如果你有一些其他元素.ele。這是行不通的。所以你也必須檢查祖先節點。 –

+0

作爲我的評論下的問題狀態...「'.mi'(這是'.ele')沒有後代,它是一個圖像」 – Kevin

1

只是去檢查點擊的element是否具有要排除的class。它只是一種short circuit的實現。如果用戶直接點擊目標元素,以下代碼將阻止不必要的dom traversal

試試這個,

$('body').on('click', function (e) { 
    if ($('.calc-info').is(':visible') 
    && !$(e.target).hasClass('mi') 
    && !$(e.target).parents('.mi').length) { 

     $('.calc-info').fadeOut('fast'); 

    } 
}); 
+1

@Downvoter。你的話目前會非常有用。謝謝! –

+2

是不是我,但'e'是事件,它不能有一個類 – adeneo

+0

@ adeneo謝謝。其實這是一個錯字。我只是糾正它。 –

0

嘗試這樣的事情。

$('mi').on('click', function() { 
$('mi').attr('rel',"clicked"); 
}); 
$('body').on('click', function() { 
if ($('.calc-info').is(':visible') && !$('.mi').attr('rel')=='clicked') { 
    $('.calc-info').fadeOut('fast'); 
} 
});` 
相關問題