jQuery工具:如何防止表单动态呈现到页面中的提交事件

jQuery工具:如何防止表单动态呈现到页面中的提交事件,jquery,asp.net-mvc,ajax,overlay,Jquery,Asp.net Mvc,Ajax,Overlay,我有一个带有按钮的Index.aspx页面。如果单击该按钮,将弹出“创建覆盖”。在这个覆盖层中有一个形状。因此,创建覆盖表单页面和Index.aspx是分开的。使用jQuery Overlay插件将整个表单呈现到Index.aspx中,该插件来自($(document).ready(函数(): .contentWrap是在其中呈现覆盖(表单)的div元素 如何防止表单通过jQuery提交 我的问题是表单不在$(document).ready(function()函数)处 完成后,我希望通过Aja

我有一个带有按钮的Index.aspx页面。如果单击该按钮,将弹出“创建覆盖”。在这个覆盖层中有一个形状。因此,创建覆盖表单页面和Index.aspx是分开的。使用jQuery Overlay插件将整个表单呈现到Index.aspx中,该插件来自($(document).ready(函数():

.contentWrap是在其中呈现覆盖(表单)的div元素

如何防止表单通过jQuery提交

我的问题是表单不在$(document).ready(function()函数)处

完成后,我希望通过Ajax从表单发送数据,并通过使用Ajax和jQuery更新Index.aspx上的表

这暂时不起作用(在document ready函数中),因为表单不存在:

    $("#formCreate").submit(function(event){
        event.preventDefault();
        hijack(this, update_employees, "html");
    });
我该怎么做

提前非常感谢

编辑 现在我在$(document).ready函数中尝试了这一点,但没有成功:(


当我按下一个按钮时,一个外部页面被渲染成一个div,该页面作为一个覆盖弹出。按照我的理解,在加载所有内容后执行onLoad方法。似乎存在问题。。我的“新员工”表单有时完全加载,有时不加载。由于这个原因,我一次收到警报阻止,另一次没有收到警报。这是在Chrome中。在Firefox中根本不起作用


有人对我有什么建议吗?

当你创建表单时,你可以绑定到表单的onSubmit并通过ajax提交它,然后返回false以阻止它提交

例如:

$('.contentWrap form').submit(function() {
        $.ajax({
            type: $(form).attr('method'),
            url: $(form).attr('action'),
            data: $(this).serializeArray(),
            success: function (data) {
               //do something on success
            }
        });
        return false;
}

如果绑定事件时页面上不存在元素(在本例中,当文档准备就绪时),则甚至无法绑定到该元素。需要在创建元素后绑定该元素。因此,在运行代码打开覆盖后,您需要运行:

$(submitButton).submit(function(event) {event.preventDefault();});
因此,我看不到您的页面,但它可能类似于:

$(overlay).open();
$(submitButton).submit(function(event) {event.preventDefault();});

仅将其放在.ready中是不起作用的。

在没有将表单实际附加到div的情况下,这真的有效吗?那么表单在哪里?如果它正在显示,那么它就在DOM的某个地方。一旦显示表单,您可以运行上面的代码以附加到其提交事件,表单就在另一个页面上(Create.aspx)并将在单击弹出按钮时呈现到contentWrap div(Index.aspx)中。是的,我尝试在“onLoad”上执行此操作覆盖的事件。但它似乎无法正常工作:/create.aspx中的form元素之后创建标记解决了问题。但我想知道为什么jQuery工具覆盖库的onLoad函数无法正常工作:/FF中它无法正常工作,而Chrome中它有时只能正常工作。我的问题是我应该在哪里写上一个标签entDefault函数?表单没有加载事件。我在覆盖事件“onLoad”()中尝试了它,但它不起作用。在我的情况下,放置阻止代码的最佳位置是什么?同样,您没有向我们显示加载表单的代码,但基本上您说“表单在另一个页面上(Create.aspx)”当您单击弹出按钮时,将被呈现到contentWrap div(Index.aspx)中。“因此,这就是代码需要执行的地方。您需要类似以下内容:$(弹出按钮)。单击(函数(事件){$(弹出)。打开();$(“#formCreate”)。提交(函数(事件){event.preventDefault();劫持(这是更新#u employees,“html”);});“按我的理解,onLoad方法是在加载所有内容后执行的”true,但如果在页面加载后发生AJAX调用(通常是在发生AJAX调用时),则在本例中的“所有内容”都是“当前正在加载的所有内容”onLoad发生在AJAX调用之前。页面上要加载的所有内容都被加载,onLoad被调用,然后您进行了AJAX调用。您更新的代码没有显示您正在从Create.aspx加载表单的位置,事实上,我在代码中的任何地方都没有看到Create.aspx的引用。
$(submitButton).submit(function(event) {event.preventDefault();});
$(overlay).open();
$(submitButton).submit(function(event) {event.preventDefault();});