Должен изменить порядок вашего заявления if. Когда он находится за пределами обработчика щелчка, как вы указали выше, он будет проверен только один раз, когда скрипт выполняется в первый раз. Вместо этого вы хотите, чтобы он проверял, отображается ли #list
каждый раз, когда где-то нажимается. Итак, поместите его в обработчик.
$(document).click(function() {
if($('#list').is(':visible')){
$('#list').fadeOut();
}
});
Вы могли бы даже проявить фантазию и перенести чек в селектор, который, я думаю, мог бы быть немного быстрее.
$(document).click(function() {
$('#list:visible').fadeOut();
});
Насколько я знаю, $(document).click()
- совершенно правильная стратегия для использования. Вы должны поместить обработчик событий в скрипт, который загружается после jQuery, но на самом деле это не имеет значения, где, и не имеет значения, готов ли DOM, пока я не думаю.
Надеюсь, это поможет!