Javascript 如何在jquery中获取动态创建表单的id

Javascript 如何在jquery中获取动态创建表单的id,javascript,jquery,asp.net-mvc,forms,Javascript,Jquery,Asp.net Mvc,Forms,我使用引导模式来显示ASP.NETMVC5表单,该表单使用对相关控制器的jQueryAjax调用动态插入到div中,然后打开 我需要截取表单的提交,因此我希望绑定到jquery中表单的提交事件,但到目前为止只能绑定到所有表单的提交事件,因为在呈现主视图时,动态表单当然不存在,例如 $('form').submit(...) 而不是 $('#serverForm').submit(...) 虽然这类工作正常,但它有一个问题,在这个视图中,我实际上有3种不同的动态形式,可以使用模态弹出窗口显示,

我使用引导模式来显示ASP.NETMVC5表单,该表单使用对相关控制器的jQueryAjax调用动态插入到div中,然后打开

我需要截取表单的提交,因此我希望绑定到jquery中表单的提交事件,但到目前为止只能绑定到所有表单的提交事件,因为在呈现主视图时,动态表单当然不存在,例如

$('form').submit(...)
而不是

$('#serverForm').submit(...)
虽然这类工作正常,但它有一个问题,在这个视图中,我实际上有3种不同的动态形式,可以使用模态弹出窗口显示,因此我需要做以下两件事之一:

用于拦截每个表单的提交事件的IdeAllyManager。 B在全局表单事件处理程序中,标识已提交的表单

我已经尝试了我能想象到的使用选项A的每一个选项,包括向弹出模式的代码添加绑定。一切都没有成功

我目前正在尝试选择B,这样我就可以决定在哪里张贴表格。这至少在提交表单时会被调用,但我的问题是,我无法获取已提交表单的id或名称,因此无法知道它是哪一个

我有以下处理程序:

<script>
    $(function () {
        $('form').submit(function(e) {
            // this is always null
            var id = $(this).attr('id');
            $.ajax({
                url: '@Url.Action("EditServer", "AccountAdmin")',
                data: new FormData(this),
                ...
            });
        });
    });
</script>
我尝试在ajax调用后添加处理程序,以填充模式,如下所示:

$(".server-link").click(function (event) {
    event.preventDefault();
    $.ajax({
        url: $(this).attr("href"),
            cache: false,
            type: "GET",
            dataType: "html",
            success: function (data, textStatus, XMLHttpRequest) {
                $('#serverDiv').html(data);
                $('#serverModal').modal('show');
                $('form').submit(function (e) {
                    var id = $(this).attr(id);
                    // test to see if handler called
                    alert(id);
                });
            },
            error: function (jgXHR, textStatus, errorThrown) {
                //The commented out message is full of Html but includes compilation errors etc from the server
                //alert('An error occured: ' + jgXHR.responseText);
                alert(textStatus + ':' + errorThrown);
            }
        });
    });
它快把我逼疯了!我尝试过各种帖子中的各种想法组合,但毫无乐趣。我需要张贴使用FormData至少在一个案例中,因为有一个文件上传图像涉及。非常感谢您提供的任何帮助。

请使用以下内容:

var id = $(e.target).attr('id');

问题是JavaScript代码在表单实际添加到页面之前就已经运行了。使用AJAX时,需要在回调中运行所需的任何JavaScript:

$.get('/some/url', function (result) {
    $('#whatever').html(result);

    $('form').submit(function(e) {
        var id = $(this).prop('id');
        // do whatever with id
    });
});

this.id和$this.attr'id'都应生成所提交表单的id。你确定它有身份证吗?它是如何生成的?你是如何插入表单的?@david这就是人们期望它能够工作的方式——我刚刚测试了一个静态示例,果然没有。事件目标不获取相关信息though@David泰德,谢谢你们。主视图在每个div周围都有元素,这些元素将保存一个模态。如果没有这些,则永远不会捕获提交事件。在David的提示下,我给了这些虚拟表单元素id,果然我现在得到了一个id,但它是虚拟表单的一个,而不是已经提交的实际表单。我想我的选项A是最好的方法,但我无法使用.on动态绑定提交事件。我想你不知道怎么会这样?再次感谢。约翰,谢谢你。我尝试了以下方法,但未捕获该事件。无法在此处插入代码,因此将添加答案。不要添加答案。更新您的问题。您确定正在调用窗体上的事件处理程序吗?在$'form'上使用console.log并确保jQuery实际匹配了某些内容。你还应该考虑用你的MODE ID来选择选择器,以防万一页面上有一个以上的表单,也就是“MyAWHeSeMeMod表格”。谢谢你的帮助。你的方法确实是需要的,特别是为了克服我的某些愚蠢行为:-。我们开始运行了!
$.get('/some/url', function (result) {
    $('#whatever').html(result);

    $('form').submit(function(e) {
        var id = $(this).prop('id');
        // do whatever with id
    });
});