Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript :可见不';提交事件后不工作_Javascript_Jquery - Fatal编程技术网

Javascript :可见不';提交事件后不工作

Javascript :可见不';提交事件后不工作,javascript,jquery,Javascript,Jquery,代码 我想在用户提交电子邮件后淡出我的表单。还有下一个问题。我只是无法捕获提交事件,所以我想要的是,如果出现成功消息,那么表单应该被隐藏。我使用的:visible如下: $('#mc-embedded-subscribe-form').submit(function (e) { if($('#mce-success-response').is(':visible')){ $("#mc_embed_signup").hide(); } }); #mce成功响应是成

代码

我想在用户提交电子邮件后淡出我的表单。还有下一个问题。我只是无法捕获提交事件,所以我想要的是,如果出现成功消息,那么表单应该被隐藏。我使用的
:visible
如下:

$('#mc-embedded-subscribe-form').submit(function (e) {
    if($('#mce-success-response').is(':visible')){
        $("#mc_embed_signup").hide();
    }
});
#mce成功响应
是成功对话框。

我还尝试:

if( $("#mce-success-response").css('display') == 'block') {
}

但它不起作用。怎么了?

是的,我认为
submit
事件只是一种方式,您只需提交,当您喜欢这种方式时,您不想得到响应。也许您可以使用ajax来处理结果。实际上,您只需提交表单,然后淡出表单,我认为。

这更多的是一种变通方法,而不是有效的解决方案

但它是有效的

function checkSuccess() {
    if ($('#mce-success-response').is(':visible')) {
        $("#mc_embed_signup").hide();
    }
} 
window.setInterval(checkSuccess, 100);
您还可以使用下面的代码为
隐藏添加延迟:

function checkSuccess() {
    function successAction(){
        $("#mc_embed_signup").hide();            
    }
    if ($('#mce-success-response').is(':visible')) {
        setTimeout(successAction, 2500);
    }
} 
window.setInterval(checkSuccess, 100);

一种可能的解决方案是在这种情况下使用自定义事件(因为正如我在注释中解释的,
success respone
元素显示在ajax成功处理程序中)

因此,在您的
mce\u success\u cb
方法中

if (resp.result == "success") {
    $('#mce-' + resp.result + '-response').show();
    $('#mce-' + resp.result + '-response').html(resp.msg);
    $('#mc-embedded-subscribe-form').each(function () {
        this.reset();
    });

    $("#mc-embedded-subscribe-form").trigger('submitsuccess');
    // If the form has errors, display them, inline if possible, or appended to #mce-error-response
} else {
    //rest of your code
}
然后


提交后,您是否收到来自AJAX的成功响应?根据您的代码片段,我假设情况就是这样,一旦Ajax请求完成,success boz就会出现。由于它将持续一段时间,您可以尝试下面的代码

function waitForIt(){
   if(!$('#mce-success-response').is(':visible')){
        setTimeout(waitForIt(),500);
    } else{
       $("#mc_embed_signup").hide(); 
}

$('#mc-embedded-subscribe-form').submit(function (e) {
        setTimeout(waitForIt(),500);
    }
});
或者,如果弹出成功消息的不是AJAX响应,您可以尝试在表单提交和用户操作之间放置一个接口。将输入类型从
submit
更改为
按钮
,或使用普通的
图像
作为按钮,即
。使用
单击()
而不是
提交()
,检查容器是否可见,如果可见,则隐藏所需的容器并触发
提交


希望有帮助

我可以使用延迟,但无效的电子邮件被认为是提交,我必须赶上成功。我没有完全的控制权,因为它是MailChimp的句柄。我明白了,你可以使用jQuery验证插件,这样,就有一个验证句柄,我想你可以用这个句柄做你想做的事情,祝你好运!看起来响应的可见性是在成功处理程序执行后设置的问题是在ajax调用后显示
mce success response
元素,该调用再次在表单提交(ajax提交)上初始化。。。因此,当您的表单提交处理程序被调用时,
mce success response
元素尚未显示。我认为在这种情况下,您需要使用ajax。在这种情况下,一个可能的解决方案是在表单提交处理程序上触发一个自定义事件,并使用该自定义事件来完成任务,而不是使用提交处理程序。问题在于试图在提交事件中隐藏内容。但在发送工作之前会触发submit事件。
function waitForIt(){
   if(!$('#mce-success-response').is(':visible')){
        setTimeout(waitForIt(),500);
    } else{
       $("#mc_embed_signup").hide(); 
}

$('#mc-embedded-subscribe-form').submit(function (e) {
        setTimeout(waitForIt(),500);
    }
});