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