我有一个通过 Ajax.ActionLink 加载 Partial 的 MVC 页面,它可以工作,然后加载的 Partial 包含一个具有 Ajax.BeginForm 的表单。此表单没有连接到不显眼的 ajax,而是执行页面刷新(我在浏览器的网络日志中验证了这一点,当我单击提交时显示发起者是浏览器而不是 jquery)。
我认为问题在于,由于加载页面时表单不存在(但后来通过 Ajax.ActionLink 添加),所以不显眼的 ajax 没有在新添加的表单上看到 data-ajax 属性和连接必要的事件。我假设这只发生在 document.ready 中,并且当时不存在 ajax 表单。
有什么我可以说的“嘿,Unobtrusive Ajax,请再次查看我的页面,因为我有一些用 data-ajax 标记的新元素并将它们连接起来”?
谢谢。
查看不显眼的 ajax 源代码,它有:
$("form[data-ajax=true]").live("submit", function (evt) {
var clickInfo = $(this).data(data_click) || [];
evt.preventDefault();
...
生成的表单标签如下所示:
<form action="/Path/Create" class="form-horizontal" data-ajax="true" data-ajax-method="post" data-ajax-mode="replace" data-ajax-update="#ParentContainer" id="PathForm" method="post" novalidate="novalidate">
据我所知,.live 事件上的选择器应该在新表单加载到页面上时拾取它。然而,该表单位于引导模式内,所以我不知道这是否会阻止事件以某种方式冒泡。
我什至可以在 Chrome 控制台中运行它:
$("form[data-ajax=true]").live("submit", function (evt) {
var clickInfo = $(this).data(data_click) || [];
evt.preventDefault(); });
它成功返回表单元素,但是当我单击提交时,它仍然会刷新整个页面。我希望它至少不会做任何事情,因为我将它连接到 preventDefault。