gpt4 book ai didi

php - 如果后验证成功,则禁用 e.preventDefault()

转载 作者:行者123 更新时间:2023-11-28 02:26:00 25 4
gpt4 key购买 nike

概述

以下是我想要发生的事情:

1. User answers the form, clicks submit
2. The data will be evaluated by the CodeIgniter `validate_new_account()`
a. If there are errors, prevent submission so that the dynamically added fields will not disappear
b. If successful / no error validation, proceed to the **else** part of `validate_new_account()` to `$this->view_preview_form( $this->get_post_data() );`

我有一个表单,并将其提交给 Controller 的 validate_new_account() 函数:

function validate_new_account() 
{
// validations here

if ( $this->form_validation->run() == FALSE ) {
// JSON-encoded validations
$errors = json_encode( $this->form_validation->error_array() );
echo $errors;
} else {
// next step
$this->view_preview_form( $this->get_post_data() );
}
}

我使用jQuery Form Plugin与 Controller 交互。

var options = {
url: "<?php echo site_url('new_account/validate_new_account'); ?>",
type: 'POST',
dataType: 'json',
success: function(data) {

if (data.length === 0) {
alert('Form successfully submitted!');
} else {
// echo validation errors from CodeIgniter
alert("Some fields weren't answered successfully. Please answer them.");
$.each(data, function(key, value){
var container = '<div class="error">'+value+'</div>';
$('.form-element input[name="'+key+'"]').after(container);
});

}

}
};

$('#main-submit').click(function(e) {
$('#main-form').valid();
$('#main-form').ajaxSubmit(options);
e.preventDefault();
});

问题

如果没有我的 ajax 函数,上面的代码可以完美运行,但我动态添加了需要 ajax 来处理所有验证的元素,否则这些元素将消失(糟糕的用户体验)。

因此,如果我启用并使用我的 ajax 功能,来自 CodeIgniter 的验证错误将按照我想要的方式打印出来(通过 ajax 的成功部分)但如果现在所有验证都正确,则表单不会转到$this->view_preview_form( $this->get_post_data() );

为什么会发生这种情况?我搜索过类似的问题,但遗憾的是没有一个与我的情况相似。

如果表单发送成功,如何才能通过e.preventDefault()

感觉

对于所有帮助我解决这个问题的人,无论是评论还是答案,非常感谢。我一直在寻找这个解决方案(CodeIgniter 验证 + jQuery 验证 + AJAX 提交 + 无缝文件上传)两个月了,现在我终于可以喘口气了。我永远不会忘记你们所有的帮助。你永远不会知道这对我来说意味着什么。

最佳答案

简单:

<script>
$('form').on('submit', function(e) {
// do your AJAX validation here
var url = $(this).attr('action');
var params = $(this).serialize();
$.post(url, params, function(response) {
if (response.errors.length > 0) {
e.preventDefault();
}
});
});
</script>

如果返回多个错误,这将阻止表单提交。否则,事件将正常进行并传播。

关于php - 如果后验证成功,则禁用 e.preventDefault(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14938480/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com