动态添加元素时,不会执行onclick事件处理程序内的函数

时间:2014-09-26 13:03:09

标签: jquery ajax spinner

我在gif使用IE图像时遇到了困难,然后我发现了spinner js这使得我的生活在这方面变得更加轻松。但是我有一个问题。我正在使用Ajax调用重新加载包含数据的表格。每行都动态添加<button> hodling Idonclick事件:

<button value= row[0] onClick="showDetailedInfo(this);return false;">Details</button>

问题是,除非我从showDetailedInfo(this)函数调用它,否则微调器工作正常。然后我根本没有得到微调器,实际执行需要时间,因为我在发回细节之前做了很多服务器端工作(再次使用Ajax)。由于我在很多地方使用微调器,除了调用微调器的函数处理动态添加元素上的事件这一事实之外,我无法想到任何其他原因(但函数本身与其他javascript一起加载。)

对于那些不熟悉spinner js的人,我这样称呼它:

var opts = {
  lines: 13, // The number of lines to draw
  length: 20, // The length of each line
  ... more options
  }

var target = document.getElementById('foo');
var spinner = new Spinner(opts).spin(target);

然而,当我在寻找可能的解决方案时,我读到初始化这样的选项可能会导致这个问题我切换到jQuery插件,现在我就像这样调用微调器:

$('#foo').spin()

但行为没有变化。仍然不确定opts部分是否没有出现问题。现在我没有使用自定义选项,我让微调器使用它的默认选项,所以我认为这应该不是问题,但无论如何。想法为什么会这样,以及如何让我的微调器工作?

1 个答案:

答案 0 :(得分:1)

您的代码已过时。您可以通过jquery单独的文件来处理实时事件,以及用于访问添加的元素&#34;在运行中#34;你必须使用$(document).on('click', 'button');

您的代码应该像

jQuery(document).ready(function($){
  $(document).on('click', 'button', function( e ){
    e.preventDefault();
    showDetailedInfo( this );
  });
});

可能需要一些小修改(它会查找页面内的所有button,并且我不知道showDetailedInfo究竟是什么)