Вы просто смотрите в неправильном направлении. Из документов jQuery для .find()
:
Получить потомков каждого элемента в текущем наборе соответствующих элементов, отфильтрованных селектором, jQuery объекта, или элемент.
В вашем коде, если у выбранного элемента нет вашего класса, вы ищете его потомков для родительского элемента. Но на самом деле в этом случае кликнул именно ребенок, поэтому вам нужно найти его предков .
Есть несколько способов сделать это, но .closest()
может быть наиболее подходящим:
elem_id = $('#'+e.target.id).closest('.mail_schedule_dropdown');
Примечание на стороне
Имена переменных в коде меня немного смутили. elem_id
вообще не является идентификатором, это фактический jQuery объект, представляющий элемент. Это кажется тривиальным, но при манипулировании идентификаторами в виде строк, элементов и селекторов, и когда ваш код становится более сложным, этого достаточно, чтобы вызвать ошибки в конце - по крайней мере, это случилось со мной! Вот моя версия для ясности:
$(document).click(function(e){
// Using '$' makes it clear that this represents a jQuery object;
// The variable name makes it clear exactly what it is
var $clicked = $('#'+e.target.id);
if (!$clicked.hasClass('mail_schedule_dropdown')) {
$clicked = $clicked.find('.mail_schedule_dropdown');
}
$clicked.hide();
});