Javascript没有';你不能在ajax生成的代码上工作吗?

Javascript没有';你不能在ajax生成的代码上工作吗?,javascript,jquery,ajax,iframe,file-upload,Javascript,Jquery,Ajax,Iframe,File Upload,我用它来上传文件。该插件使用隐藏的iframe 上传而不刷新页面。一切正常,除了javascript不能在上运行 生成的代码。这是我的密码: <form id="image_form" action="" method="post" enctype="multipart/form-data"> <input type="file" id="ima

我用它来上传文件。该插件使用隐藏的iframe

上传而不刷新页面。一切正常,除了javascript不能在上运行

生成的代码。这是我的密码:

    <form id="image_form" action="" method="post" enctype="multipart/form-data">
        <input type="file" id="image_file" name="image_file"><br>
        <input type="submit" value="upload">
    </form>
    <div id="avatar_wrapper">
    </div>
奇怪的是,click函数对这些生成的代码不起作用。 有人能帮我吗?谢谢。

您必须在这些动态生成的元素上使用

$('.choose_avatar').live("click", function() { /* Just for test */
    alert('hello');
});

您必须使用
live()
,或者手动执行,在常量的父元素上放置
单击
处理程序,并检查
事件.目标
以查看单击了哪一个

无论如何,这就是
live
在引擎盖下的工作方式,所以请坚持下去:)


请注意,如果您使用的是较新的jQuery,则在容器avatar\u包装上使用
on()
而不是
live()

,您必须绑定一个live/delegate侦听器:

$('#avatar_wrapper').delegate('.choose_avatar','click',function() {
    alert('hello');
});
希望有帮助

当您执行
$('.choose_avatar')
时,您正在使用类
choose_avatar
(尚不存在)选择元素并附加事件处理程序。如果元素是动态加载的,这显然不起作用。更正确的方法是在包装器div上处理委托事件,如下所示:

$('#avatar_wrapper').delegate('img.choose_avatar', 'click', function (e) {
    // do stuff
});
$('.choose_avatar').live("click", function() { /* Just for test */
    alert('hello');
});
$('#avatar_wrapper').delegate('.choose_avatar','click',function() {
    alert('hello');
});
$('#avatar_wrapper').delegate('img.choose_avatar', 'click', function (e) {
    // do stuff
});