我有一个模态窗口,允许用户提交表单作为号召性用语之一。但是,点击提交'关闭模态窗口,但我不希望它。 Here is the page: infowest.com/residential-internet。
要激活模态窗口,用户单击黄橙色"开始使用"任何"卡上的按钮"互联网选项。然后,为了填写并提交表单,用户点击"请求回拨"按钮。实际上,来找到,点击任何地方接受"请求回叫"按钮关闭模态窗口,而不仅仅是单击“提交”按钮。按钮。
我尝试使用此代码:
if ( $(event.target).is('.modal-window-content') ) {
return false;
}
if ( $(event.target).is('input') ) {
return false;
}
保持模式不会关闭,这有效但不允许表单提交甚至尝试提交。该表单使用Ajax。这是WP Contact Form 7插件。
我正在使用jQuery,我正在编写,但我从来没有真正学过jQuery,所以我假设我在js代码中犯了错误。这是我的代码:
var pagePosition;
$('.js--activate-cta-modal').click(function() {
if ( (!$(this).hasClass('.active')) && (!$('body').hasClass('modal-active')) ) {
pagePosition = $(window).scrollTop();
$('.cta-modal-window').css( "margin-top", pagePosition );
$(this).addClass("active");
$('body').addClass("modal-active");
$('body').css( "top", -pagePosition );
return false;
}
if($(this).hasClass('active')) {
$(this).removeClass('active');
$('body').removeClass('modal-active')
$('body').css( "top", "0" );
$('body').scrollTop(pagePosition);
}
});
$('.js--activate-cta-modal').click(function (e) {
e.stopPropagation();
});
$('.modal-overlay').click(function() {
$('body').removeClass('modal-active');
$('.js--activate-cta-modal').removeClass('active');
$('body').css( "top", "0" );
$('body').scrollTop(pagePosition);
});
$('.cta-modal-window').click(function() {
// if ( $(event.target).is('.modal-window-content') ) {
// return false;
// }
// if ( $(event.target).is('input') ) {
// return false;
// }
$('body').removeClass('modal-active');
$('.js--activate-cta-modal').removeClass('active');
$('body').css( "top", "0" );
$('body').scrollTop(pagePosition);
});
$('.close-modal-window').click(function() {
$('body').removeClass('modal-active');
$('.js--activate-cta-modal').removeClass('active');
$('body').css( "top", "0" );
$('body').scrollTop(pagePosition);
});
我非常感谢任何帮助!谢谢!
答案 0 :(得分:0)
我现在更了解
$('element').click(function (e) {
e.stopPropagation();
});
是为了。这用于不执行目标元素的单击功能。我需要对此进行更多阅读,但我通过使用此代码定位div.modal-window-content
来解决问题。
答案 1 :(得分:0)
重要的是不要混淆Event.stopPropagation()
和Event.preventDefault()
,并确切了解他们的行为。
Event.stopPropagation()
可以阻止事件在DOM
中冒出来。通常,如果单击某个元素,其事件将尝试触发,然后父元素将尝试触发其事件版本,依此类推。这用于将事件包含在DOM
的某个级别。
Event.preventDefault()
停止元素触发的默认操作。最常见的是在form
上使用此功能来阻止其提交。这用于取消某些事件的元素的默认行为。
以下是常见模态分段技术的示例。 http://codepen.io/Oka/pen/xGKJVJ
(如果您是CodePen的新手,请点击眼球查看任何已编译的代码。我在这里使用了Jade和SCSS。页面也在运行Normalize.css)
使用这种技术,我们只需要一个Event.stopPropagation()
来阻止类似事件从模态冒泡到其容器。单击模态容器上的任意位置将关闭模态,小关闭按钮也将关闭。您可以扩展它以满足您的需求,关键是模式永远不应该冒泡到它的容器。
JS
var open = $('.modal-open'),
close = $('.modal-close'),
modal = $('.modal'),
container = $('.modal-container');
function openModal (e) {
container.addClass('active');
}
function closeModal (e) {
container.removeClass('active');
}
open.on('mouseup', openModal);
close.on('mouseup', closeModal);
container.on('mouseup', closeModal);
modal.on('mouseup', function (e) {
e.stopPropagation();
});
(请记住,其中一些内容是IE9 +。如果您有遗留需求,请务必检查浏览器兼容性。)