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

Chl*_*loe 2 javascript ajax jquery yii2

我有一个表单,我通过AJAX动态加载.我尝试绑定beforeSubmit表单,但似乎失败,因为表单正在提交,浏览器正在加载新页面.当表单在页面中是静态的时,beforeSubmit事件处理程序正在运行,浏览器没有更改位置.我试图改变从$('#emailForm').on('beforeSubmit', function(event) {下面但它没有用.如何beforeSubmit在表格上附上?

view
        <div id="emailBody"><!-- Placeholder for email form w/CAPTCHA --></div>
        <?#= $this->render('_email_form.php', ['emailModel' => new EmailModel()]) ?>
Run Code Online (Sandbox Code Playgroud) partial
<?php $form = ActiveForm::begin(['id' => 'emailForm', 'action' => 'send-email', 'method' => 'post', 'enableAjaxValidation' => false, 'options' => ['class' => '']]) ?> 
  <?= $form->field($emailModel, 'fromName') ?>
Run Code Online (Sandbox Code Playgroud) 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();
Run Code Online (Sandbox Code Playgroud) rendered HTML
<div id="emailBody"><form id="emailForm" class="" action="send-email" method="post">
<input type="hidden" name="_csrf" value="aS1LcTJfeU4tXHkuQG4yCjYbDCMfLTEMLEB4EwY4TygGaAAJdBNMPw=="> 
Run Code Online (Sandbox Code Playgroud)

不是它相关,我使用的是PHP,Bootstrap和Yii框架.

ceb*_*ebe 5

ActiveForm生成初始化它所需的javascript:https://github.com/yiisoft/yii2/blob/49aec24ae1f01d51b4f3cec8e44d44387022d06b/framework/widgets/ActiveForm.php#L201-L206

要在客户端执行此Javascript代码,您必须确保以下内容:

  1. 确保已注册的JS是响应的一部分,如果在控制器中使用renderAjax()呈现视图,则应该是这种情况.
  2. 执行包含在响应中的Javascript.根据JQuery文档,这是ajax请求的情况,如果dataType设置设置为html:

    "html":以纯文本形式返回HTML; 包含的脚本标记在插入DOM时进行评估.