0

最近,当我有一些需要在点击事件中触发 $.ajax 的新功能时,我有一些如下代码,

$('.ClickMe').on('click', function() {

   // Do something

   $.ajax({
     type: 'POST',
     url: 'Foo.aspx/BarWebMethod',
     data: '{}',
     contentType: 'application/jspn',
     dataType: 'json',
     success: function(data) {
       // Do good thing
     },
     error: function() {
       // Do something bad
     }

});

我意识到该页面会在页面加载期间触发对我的 WebMethod 的 AJAX 调用并缓存所有结果,而不是在有人单击其类中具有“ClickMe”的元素期间触发它。

功能方面一切都很好,但是由于我有大约数百个元素会与上面的代码挂钩,而且我当然不想运行那些数百个过多的 AJAX 调用。我只想在用户单击任何元素时运行那段代码。

任何想法?

4

3 回答 3

1

您需要确保您实际上并未以某种方式触发点击事件。

为了简单起见,我会使用.click而不是.on

$(document).ready(function() {
  $("#target").click(function() {
    alert("Handler for .click() called.");
  });
});

将事件包装在 中$(document).ready也将确保在绑定单击事件之前加载文档。

还可以使用 Firebug 或 Chrome 开发人员工具(F12 是默认键绑定)查看重新加载页面时实际触发的网络请求。

Chrome 开发者工具 - 网络

使用这些工具,您应该能够更多地了解您的网页实际在做什么。

于 2012-07-24T09:00:08.173 回答
0

除非单击 clickme 类的东西,否则这不会触发,传统的方法是附加到准备好的文档。

如果您不想缓存将其关闭,下面显示的是文档就绪的简写

$(function() {

  $.ajaxSetup({ cache: false });
  ...
  your click handler attached to element
});
于 2012-07-24T08:59:21.247 回答
0

将您的脚本放在此函数中

$(document).ready(function() {
  // Here goes your script.
});
于 2012-07-24T08:59:27.473 回答