Как я уже говорил в комментариях:
Вы сравниваете объект event.target
в строку. Поэтому event.target === "form"
всегда будет ложным. Вам нужно либо проверить имя элемента, либо сравнить его с фактическим элементом DOM.
Например, чтобы получить имя тега элемента, используйте event.target.tagName.toLowerCase()
. С другой стороны, так как вы используете JQuery, вы можете использовать .is()
method:
$("#overlayBG").click(function(event) {
if (!$(event.target).is('form')) {
$("#overlayBG").hide();
} else {
alert("The form was clicked...");
}
});
Однако, это будет только проверить, если event.target
является form
элемент (который не будет работать при нажатии на дочерние элементы вида). Поэтому вы должны пройти через DOM и проверить, если ближайший предок элемент является form
элементом:
Updated Example
$("#overlayBG").click(function(event) {
if (!$(event.target).closest('form').length) {
$("#overlayBG").hide();
} else {
alert("The form was clicked...");
}
});
Кроме того, если вы хотите слушать все кликов:
Updated Example
$(document).on('click', function(event) {
if (!$(event.target).closest('#overlayBG form').length) {
$("#overlayBG").hide();
} else {
alert("The form was clicked...");
}
});
Вы можете оставить ХТ мл, так что мы можем проверить –
'event.target' не является строкой, поэтому' event.target === "form" 'всегда будет false. Вам нужно либо проверить имя элемента, либо сравнить его с фактическим элементом DOM. Чтобы получить имя тега элемента, используйте 'event.target.tagName.toLowerCase()' .... или, поскольку вы используете jQuery, используйте метод '.is()' ... $ (event.target) .is ('форма') '. –
Джош прав, если вы хотите проверить его сами, попробуйте console.log (e.target); – kdyz