不显眼的 ajax 事件中的表单元素访问

Form element access in unobtrusive ajax event

提问人:Sam7 提问时间:8/15/2013 最后编辑:Sam7 更新时间:8/15/2013 访问量:923

问:

我想为使用不显眼的 ajax 的特定表单挂接到一个 ajax 回调。 ajax 调用对于使用不显眼的 ajax 的这种标准形式没有问题:

<form action="/xyz" data-ajax="true" data-ajax-method="POST" id="someformid" method="post">
    <input type="text" name="bla" />
    <button>submit</button>
</form>

我的第一个方法是:

var form = $("#someformid");
$(document).ajaxComplete(function (e, request, options) {
    // is not hitting here
});

但这似乎行不通。 此方法会命中处理程序,但不仅适用于所需的表单。但对于所有 ajaxComplete 事件。

var form = $("#someformid");
form.submit(function (eevent) {
    $(document).ajaxComplete(function (e, request, options) {
        // this hits ok. but not just for this form
    });
});

下一个选项是使用“data-ajax-success”。但这似乎并没有提供表单上下文。

所以问题来了: 如何只为一个表单挂钩ajaxComplete事件。

注意:我想避免使用诸如匹配 url 或向查询添加一些唯一 id 等变通方法。

谢谢!

asp.net-mvc jquery unobtrusive-ajax

评论

0赞 DevlshOne 8/15/2013
我会尝试提供 和 id 并将id 用作 .只是一个建议,不知道它是否有效。<button>.ajaxComplete()

答:

0赞 DevlshOne 8/15/2013 #1

从文档中:.ajaxComplete()

从 jQuery 1.8 开始,只能附加 .ajaxComplete() 方法 记录。无论什么,都会调用所有 ajaxComplete 处理程序 Ajax 请求已完成。如果必须区分 请求,请使用传递给处理程序的参数。每次 ajaxComplete 处理程序,它被传递给事件对象, XMLHttpRequest 对象,以及 创建请求。例如,您可以将回调限制为 仅处理处理特定 URL 的事件:

所以,我读到这篇文章的方式是,如果你知道你将运行一个特定的URL(你的php处理脚本),那么你可以在设置中将该URL传递给方法。(在您的例子中,“/xyz”).ajaxComplete()

$( document ).ajaxComplete(function( event, xhr, settings ) {
  if ( settings.url === "/xyz" ) {
    $( ".log" ).text( "Triggered ajaxComplete handler. The result is " +
      xhr.responseHTML );
  }
});