请教jQuery绑定事件的问题

最终想实现的功能是,在一个表单内,通过动态增加文本框和上传图片功能,不限制数量的设置图片和图片标题
在最外层用一个form表单统一提交所有的图片链接、图片标题。

网上找的php ajax上传图片,我在使用动态增加文本框和上传图片时,将“获取”按钮绑定事件。就可以在新生成的UL中,获取当前UL下title[]的值。想用类似方法在新生成的UL中点击按钮实现上传。发现jQuery中直接是new了一个对象出来。不知道该如何绑定。

现在点击默认的上传按钮,可以实现上传。但动态生成出来的上传按钮就点击无效。

代码中引入的plupload.full.min.js的文档是http://chaping.github.io/plup...

<!DOCTYPE html>
<html>
<head>
  
</head>
<script type="text/javascript" src="http://www.sucaihuo.com/Public/js/other/jquery.js"></script> 
<script type="text/javascript" src="plupload.full.min.js"></script> 
<script type="text/javascript">
$(function() {
 var uploader = new plupload.Uploader({ //创建实例的构造方法 
    runtimes: 'html5,html4', 
    //上传插件初始化选用那种方式的优先级顺序 
    browse_button: 'btn', 
    // 上传按钮 
    url: "ajax.php", 
   
    filters: { 
        max_file_size: '500kb', 
        //最大上传文件大小(格式100b, 10kb, 10mb, 1gb) 
        mime_types: [ //允许文件上传类型 
        { 
            title: "files", 
            extensions: "jpg,png,gif" 
        }] 
    }, 
    multi_selection: false, 
    //true:ctrl多文件上传, false 单文件上传 
    init: { 
        FilesAdded: function(up, files) { //文件上传前 
            if ($("#ul_pics").children("li").length > 30) { 
                alert("您上传的图片太多了!"); 
                uploader.destroy(); 
            } else { 
                var li = ''; 
                plupload.each(files, 
                function(file) { //遍历文件 
                    // li += "<li id='" + file['id'] + "'><div class='progress'><span class='bar'></span><span class='percent'>0%</span></div></li>"; 
                }); 
                // $("#ul_pics").append(li); 
                uploader.start(); 
            } 
        }, 
        // UploadProgress: function(up, file) { //上传中,显示进度条 
        //     $("#" + file.id).find('.bar').css({ 
        //         "width": file.percent + "%" 
        //     }).find(".percent").text(file.percent + "%"); 
        // }, 
        FileUploaded: function(up, file, info) { //文件上传成功的时候触发 
            var data = JSON.parse(info.response); 
            $(".pics").attr('src',data.pic);
            $(".res").val(data.name);
            // $("#" + file.id).html("<div class='img'><img src='" + data.pic + "'/></div><p>" + data.name + "</p>"); 
        }, 
        Error: function(up, err) { //上传出错的时候触发 
            alert(err.message); 
        } 
    } 

}); 
uploader.init();

$("#add").click(function(){
       var a = '\
       <ul class="list">\
       <li><a id="huoqu">获取</a></li>\
    <li><input class="title" name="title[]"></input></li>\
    <li><input class="res" name="res[]"></input></li>\
    <li><img class="pics" name="pics[]" src="https://www.baidu.com/img/baidu_jgylogo3.gif"></img></li>\
    <li>\
      <a class="btn" id="btn" style="color: red;background-color: yellow;cursor: pointer;">上传图片</a>\
    </li>\
  </ul>\
       ';
       $(a).appendTo("#content");
      });

$("#content").delegate("#huoqu","click",function(){
    console.log($(this).parent().parent().find(".title").val());
  });

});
</script>
<body> <ul id="ul_pics" class="ul_pics clearfix"></ul>
<a id="add">增加</a>
<a id="del">删除</a>
<div id="content">
  <ul class="list">
    <li><a id="huoqu">获取</a></li>
    <li><input class="title" name="title[]" value="title[]">title[]</input></li>
    <li><input class="res" name="res[]" value="res[]">res[]</input></li>
    <li><img class="pics" name="pics[]" src="https://www.baidu.com/img/baidu_jgylogo3.gif"></img></li>
    <li>
      <a class="btn" id="btn">上传图片</a>       
    </li>
  </ul>
</div>


</body>
</html>
繁星coding
浏览 524回答 6
6回答

杨__羊羊

同意楼上的看法。也许现在的问题只是动态生成的元素无法绑定事件。要绑定在父级元素

HUX布斯

事件绑定在该节点未生成时已经处理绑定事件了,新生成的节点是不是有该绑定事件的,所有要把事件挂载到父节点以上的方式去处理,也可以直接挂载到body去处理。 $('body').degelate('节点','click',function(e){ //事件 })

跃然一笑

楼上回答的都差不多了,你可以搜 事件委托机制 ,你就能更好的解决你的疑问了。
打开App,查看更多内容
随时随地看视频慕课网APP