2015-07-05 211 views
2

我有一個問題。當我第一次按下鏈接div展示的時候,當我按下文檔時它就消失了。當我第二次按鏈接div時,突然消失。怎麼了?jquery div顯示和隱藏問題

$(function() { 
$("#trigger").click(function() { 
    $('#toolWrapper').toggle(function() { 
     $(document).click(function(event) { 
      if (!($(event.target).is('#toolWrapper') || $(event.target).parents('#toolWrapper').length || $(event.target).is('#trigger'))) { 
       $('#toolWrapper').hide(500); 
       event.preventDefault(); 
      } 
     }); 
    }); 
}); 

});

+0

這似乎是你告訴它做什麼。什麼是_expected_行爲? –

+3

你爲什麼要在另一個點擊處理程序中綁定'.click()'處理程序*?第二次'#trigger'被點擊後,您將綁定第二個'.click()'處理程序到文檔。在第三次點擊時,你會綁定第三個。等等。 – nnnnnn

+0

如何解決這個問題? –

回答

0

你嵌套了你的回調 - 所以你只能在其他回調中設置事件回調。我想這是造成你的問題的原因。

在你的觸發事件處理程序中,如果你使用event.stopPropagation();那麼你可以停止被調用的文檔事件處理程序,所以你不必檢查它是否是一個事件目標。

這是你正在嘗試做什麼? jsfiddle

[編輯]:添加代碼回答:

$(document).ready(function() { 
    $('#toolWrapper').hide(); 
}); 

$("#trigger").click(function(event) { 
    $('#toolWrapper').show(); 
    event.stopPropagation(); 
}); 

$(document).click(function() { 
    if (!$(event.target).is('#toolWrapper') || $(event.target).parents('#toolWrapper').length) { 
     $("#toolWrapper").hide(500); 
    } 
}); 
+0

那麼我試圖做出彈出對話框,但我不知道要解決這個問題。也許你能修復這些代碼嗎? –

+0

我認爲這是你正在嘗試做的...... [點擊這裏](https://jsfiddle.net/kaayoqon/) – k212

+0

@ k212,你錯過了最後一個函數中的參數「event」。否則,它工作正常。 –