2013-03-28 79 views
1

我使用工具提示在頁面上顯示錯誤消息,當我點擊視圖中的其他位置時,我需要關閉它。我用下面的代碼來控制這個動作:jquery not function miss element

$(':not(.qtip)').click(function(){ 
    $('.qtip').hide(); 
}); 

的「.qtip」用於標記工具尖端區域。工具提示本身在出現時創建一個新的工具提示,這裏發生的事情是當我點擊工具提示時,它會消失。

但是當我使用的選擇,而不是全身的規模較小,它工作得很好,這是一個有點怪異,比如:

$("#id").not('.qtip').click(function(){ 
    $('.qtip').hide(); 
}); 

回答

2

這將是最好只針對document的處理點擊您的工具提示外部; :not(.qtip)的選擇器可能會返回一個非常大的結果集。

$(document).on('click', function() { 
    $('.qtip').hide(); 
} 

在提示本身就需要防止click事件冒泡記錄的水平,如果你不這樣做又:

$('.qtip').on('click', false); 
+0

它會隱藏qtip,即使點擊是在裏面。 –

+0

@Sylvanus好點,雖然我不確定OP是否已經處理qtip本身的點擊事件。 –

+0

我試過這些代碼,但它沒有工作,似乎點擊事件沒有綁定到qtip元素 –

1

使用事件冒泡你的優勢

$(document).on("mouseup", function (e) { 
    var target = e.target || e.srcElement; 
    var container = $(".qtip"); 

    if (container.not(target) && container.has(target).length === 0) 
    { 
     container.hide(); 
    } 
}); 
+0

我通過使用parents()函數檢查目標是否在qtip區域內,避免了冒泡,從而解決了這個問題。 if(!($(event.target).parents('。qtip')。length> 0)){$('。qtip')。hide(); } –

0

嘗試

$(document).on("click", function(e) { 
    var qtip = $(e.target).closest('.qtip'); 
    if(!qtip.length) 
     $('.qtip').hide(); 
}); 
1

我建議你做兩件事情:

$(document).click(function() { 
    $('.qtip').hide(); 
}); 


$('.qtip').click(function(e){ 
    e.stopPropagation(); 
}); 
  1. 的文件點擊隱藏.qtip
  2. 停止事件冒泡上的.qtip點擊,點擊此處將不遍歷到父。
+0

我試過這段代碼,但似乎點擊事件仍然冒泡,我沒有弄清楚它爲什麼發生了 –

相關問題