Если вы привязываетесь к событию отправки, а не клику, оно срабатывает только в том случае, если оно проходит проверку HTML5.
Лучше всего кэшировать селектор jQuery в переменных, если вы используете его несколько раз, чтобы вы не нужно перемещаться по DOM каждый раз, когда вы обращаетесь к элементу. jQuery также предоставляет функцию .serialize (), которая будет обрабатывать синтаксический анализ данных формы для вас.
var $contactForm = $('#contactForm');
$contactForm.on('submit', function(ev){
ev.preventDefault();
$.ajax({
url: "scripts/mail.php",
type: 'POST',
data: $contactForm.serialize(),
success: function(msg){
disablePopupContact();
$("#popupMessageSent").css("visibility", "visible");
},
error: function() {
alert("Bad submit");
}
});
});