Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.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 如何在Yii中绑定到AJAX加载表单上的beforeSubmit事件?_Javascript_Jquery_Ajax_Yii2 - Fatal编程技术网

Javascript 如何在Yii中绑定到AJAX加载表单上的beforeSubmit事件?

Javascript 如何在Yii中绑定到AJAX加载表单上的beforeSubmit事件?,javascript,jquery,ajax,yii2,Javascript,Jquery,Ajax,Yii2,我有一个通过AJAX动态加载的表单。我尝试在表单提交之前绑定,,但似乎失败了,因为表单正在提交,浏览器正在加载新页面。当表单在页面中是静态的时,beforesmit事件处理程序正在工作,浏览器没有更改位置。我试图从('beforeSubmit',函数(事件){上的$('#emailForm')更改为下面的,但无效。如何在表单上附加beforeSubmit 查看 <div id="emailBody"><!-- Placeholder for

我有一个通过AJAX动态加载的表单。我尝试在表单提交之前绑定
,但似乎失败了,因为表单正在提交,浏览器正在加载新页面。当表单在页面中是静态的时,
beforesmit
事件处理程序正在工作,浏览器没有更改位置。我试图从('beforeSubmit',函数(事件){上的
$('#emailForm')更改为下面的,但无效。如何在表单上附加
beforeSubmit

查看
        <div id="emailBody"><!-- Placeholder for email form w/CAPTCHA --></div>
        <?#= $this->render('_email_form.php', ['emailModel' => new EmailModel()]) ?>
JavaScript
jQuery(function() {
    $('#emailModal').on('show.bs.modal', function (event) { // load email form w/CAPTCHA
        $('#emailBody').load('email-form');
    });
    $('#emailBody').on('beforeSubmit', '#emailForm', function(event) {
        event.preventDefault();
呈现的HTML
<div id="emailBody"><form id="emailForm" class="" action="send-email" method="post">
<input type="hidden" name="_csrf" value="aS1LcTJfeU4tXHkuQG4yCjYbDCMfLTEMLEB4EwY4TygGaAAJdBNMPw=="> 


与此无关,我使用的是PHP、Bootstrap和Yii框架。

您正在执行beforeSubmit,而表单尚未出现在dom中

试试这个:

jQuery(function() {
    $('#emailModal').on('show.bs.modal', function (event) { // load email form w/CAPTCHA
        $('#emailBody').load('email-form',function(){
            $(this).on('beforeSubmit', function(event) {
             event.preventDefault();
             //The rest of your form code.
            });
         });

    });
});

ActiveForm在此处生成初始化所需的javascript:

要在客户端执行此Javascript代码,必须确保:

  • 确保注册的JS是响应的一部分,如果在控制器中使用渲染视图,则应该是这样
  • 执行响应中包含的Javascript。根据示例,如果
    dataType
    设置设置为
    html
    ,则ajax请求就是这种情况:
    “html”
    :以纯文本形式返回html;在DOM中插入时,将计算包含的脚本标记

  • 使用以下命令:

    $(document).on('beforeSubmit', 'form', function(e) {
       // code here
     }
    
    而不是:

     $('form').on('beforeSubmit', function(e) {
       // code here
     }
    

    我做了一些深入的搜索,我几乎完全是这样做的:我有一种强烈的感觉,
    beforeSubmit
    事件被Yii绑定,Yii没有触发该事件。我将
    beforeSubmit
    更改为just
    submit
    ,这确实调用了函数,但现在Yii验证不起作用,我的方法不知道如何调用它andle返回的验证错误。您能告诉我们您正在尝试做什么吗?@GregBorbonus很抱歉,这不可能,因为它取决于哪个不是像JQuery那样的Javascript文件。我原以为这就是Direct and Delegated Events版本的用途?尽管如此,我尝试了它,但可惜它不起作用。
    Resource in解释为文档,但使用MIME类型application/json传输:http://localhost:81/project/web/shopping/send-电子邮件“.导航到http://localhost:81/project/web/shopping/send-电子邮件
    显示您的ajax调用存在问题。加载是一个ajax事件。因此,您的核心功能中存在一些问题。只有在jquery能够获取元素后,.on才适用,如果元素不存在,它就无法获取wow,
    renderAjax()
    是我所需要的!我没有意识到这一点。这是我的控制器操作,它呈现了部分:
    公共函数actionEmailForm(){$This->layout=false;return$This->render(“'email\u form',['emailModel'=>new emailModel());}
    如您所见,它不包括
    yii.validation.js
    或任何其他脚本。顺便说一句:使用
    renderAjax()
    renderPartial()
    您不需要设置
    $this->layout=false;
    $(文档)。on需要使用,因为#是动态html
     $('form').on('beforeSubmit', function(e) {
       // code here
     }