javascript - 在 jQuery AJAX 中第二次尝试后表单提交不起作用

标签 javascript php jquery ajax codeigniter-2

我的项目中有一个表单将通过 jQuery AJAX 提交。

数据将在服务器端进行验证,如果数据无效,它将加载带有验证错误的表单并将该 HTML 附加到 div。

在下次尝试提交表单时,它会直接重定向到表单操作 URL,即 event.preventDefault() 不工作。


这是我的代码:

initFormSubmit: function () {
                var form = $('form#forum');
                $(document).on('submit', form, function (event) {
                    event.preventDefault();

                    if ($(this).attr('name')) {
                        form.append(
                                $("<input type='hidden'>").attr({
                            name: $(this).attr('name'),
                            value: $(this).attr('value')})
                                );
                    }

                    var formData = form.serialize();

                    $.ajax({
                        type: form.attr('method'),
                        url: form.attr('action'),
                        data: formData,
                        success: function (data) {
                            $('#respond').empty();

                            $('#respond').append(data);
                        }
                    });
                });

            }

数据 = 表单,如果无效则验证错误。

最佳答案

您没有正确使用事件委托(delegate)。您传递给 .on 的第二个参数是 form,它是一个 jQuery 对象。

对于事件委托(delegate),第二个参数需要是一个字符串。由于它是一个对象,jQuery 假设它是作为 data 参数而不是 selector 参数传入的。 (如果您在处理程序中执行 console.log(event.data),它应该显示表单对象)。

只需将处理程序更改为:

$(document).on('submit', 'form#forum', function (event) {

并确保将处理程序中的所有引用从 form 更改为 $(this)

关于javascript - 在 jQuery AJAX 中第二次尝试后表单提交不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30944332/

相关文章:

javascript - 当我想要添加下一张图像时,图像被替换

javascript - 在文本框中仅输入数字

javascript - ngresource 访问属性资源时出错

php - 在PHP中加载数据infile不起作用

php - SQL查询提取给定时间范围内的最高值?

jquery - ajax失败后重新绑定(bind)当前函数?

javascript - 自定义 JavaScript 与 Flot 的交互

javascript - 无法从 Sublime Text 中的 html 访问 javascript 代码

php - Dockerize 用于生产的 PHP 应用程序

jquery - 即使 jQuery Submit() 函数返回 false,Drupal 表单也会继续提交;