Jquery 动态添加元素时,不会执行onclick事件处理程序中的函数
我很难将Jquery 动态添加元素时,不会执行onclick事件处理程序中的函数,jquery,ajax,spinner,Jquery,Ajax,Spinner,我很难将gif图像与IE一起使用,然后我发现,在这方面,是什么让我的生活轻松了很多。然而,我有一个问题。我正在使用Ajax调用使用数据重新加载一个表。每行都有一个动态添加的和onclick事件: <button value= row[0] onClick="showDetailedInfo(this);return false;">Details</button> 然而,当我在寻找可能的解决方案时,我读到初始化这样的选项可能会导致这个问题,我切换到jQuery插件,现在
gif
图像与IE
一起使用,然后我发现,在这方面,是什么让我的生活轻松了很多。然而,我有一个问题。我正在使用Ajax
调用使用数据重新加载一个表。每行都有一个动态添加的
和onclick
事件:
<button value= row[0] onClick="showDetailedInfo(this);return false;">Details</button>
然而,当我在寻找可能的解决方案时,我读到初始化这样的选项可能会导致这个问题,我切换到jQuery
插件,现在我简单地如下调用微调器:
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);
$('#foo').spin()
但行为没有改变。仍然不确定
选项
部件是否没有出现问题。现在我没有使用自定义选项,我让微调器使用它的默认选项,所以我认为这应该不是一个问题,但无论如何。为什么会发生这种情况,以及如何使我的微调器工作?您的代码已经过时。您可以通过jquery单独的文件处理实时事件,对于访问“动态”添加的元素,您必须使用$(文档)
您的代码应该是
jQuery(document).ready(function($){
$(document).on('click', 'button', function( e ){
e.preventDefault();
showDetailedInfo( this );
});
});
它可能需要一些小的修改(它在页面内查找所有按钮,我不知道showDetailedInfo
的具体功能)您能提供showDetailedInfo
函数和函数的代码吗,其中添加了按钮
s?此外,onclick=”“
是一种过时的处理事件的方式。@Regent结果表明,因为在$.ajax
调用中,async
选项被设置为false
我得到了这种行为。事实上,这并不是因为我第一次思考时动态渲染了按钮。尽管我想知道为什么在调用$('#foo').spin()
之前调用$.ajax
时会出现这种行为。函数本身很长,因为我收集了很多数据,但本质上它调用微调器,触发ajax调用,而另一个调用只是收集字段数据。现在,您知道为什么async:false
是非常糟糕且不受欢迎的事情了,不是吗?:)@丽晶我不知道它被弃用了。不过,Ajax
可能是从服务器发送/接收数据的最简单方法,而且在某些情况下,您必须在synch
模式下使用它。并不是说没有编程解决方案,而是最终业务需求接管了良好的编程逻辑。不过,谢谢你为我的问题抽出时间!关于必须在同步模式下使用它的情况:这些情况是不正确的代码组织,而不是“必须”的情况。您可以始终使用回调函数或$.Deferred
promise
来处理这些情况。真正地将浏览器进程挂起几秒钟不是一个好主意。我同意你的看法。我唯一无法解决并让我使用onclick
的问题是,我无法检测触发事件的确切按钮,因此无法获取其值,因为该值是我使用的id
。。主要是为了一切。但是我知道这样一个事实,如果我有10行代码,那么当事件被触发时,有10个按钮,那么我如何获取实际触发它的按钮的值。正如您在我的代码中所看到的,我传递了一个属性行[0]
,它是eval()
ed到实际的Id号。如何使用此方法获取此id?@Leron此
被传递给此答案中的showDetailedInfo
函数,因此您可以像在原始代码中一样使用它这个
指向元素,触发了该元素的事件处理程序。嗯,尝试一下。非常感谢你的提醒。