【问题标题】:Not able to add event handler in dropzone无法在 dropzone 中添加事件处理程序
【发布时间】:2013-12-27 19:31:20
【问题描述】:

我正在制作这个 addDropzone() 函数,该函数在单击按钮时调用,该函数传递一个值,因为需要多个 dropzone 元素,但一次只需要一个但在不同的 div 上,因此函数中的“val”参数有助于定义 div id。我能够运行 dropzone 元素。它还将文件保存在服务器上,但我无法让事件处理程序正常工作。

这是我正在使用的功能。

如果有人可以建议我在事件处理程序中读取服务器消息的方法

JAVASCRIPT 代码

    function addDropzone(val){
    document.getElementById("div2").innerHTML = '<div class="item" style="width:96%; margin:5px auto; position:relative; height: auto; background-color:lightgray;"><form action="file-upload.php" class="dropzone" id="my-dropzone-'+val+'"></form></div>';        
    var myDropzone = new Dropzone("div #my-dropzone-"+val);     
    Dropzone.options.myDropzone = {
            paramName: 'file',
            method: 'post',
            maxFiles: 1,
            url: 'file-upload.php',
            dictDefaultMessage: "Drag your images",
            clickable: false,
            maxFilesize: 512,
            uploadMultiple: false,
            addRemoveLinks: true,
            forceFallback:true      
    };
    Dropzone.options.myDropzone = false;
    Dropzone.options.myDropzone.enable();

    Dropzone.options.myDropzone = {
        init: function(){
        this.on("maxfilesexceeded", function(file) { alert("File limit 1"); });
        this.on("complete", function(file) {alert(serverReponse);});
        }
    };

}

【问题讨论】:

    标签: javascript jquery dropzone.js


    【解决方案1】:

    不知道 dropzone,但据我了解文档,我会这样写:

    function addDropzone(val){
      var dropZoneId= "my-dropzone-"+val;
      // this line has moved-up, and the option is not referenced in the same way
      Dropzone.options[dropZoneId] = false;
      // proper way of adding new content to div2 without losing event handlers
      var div = document.createElement('div');
      div.innerHTML = '<div class="item" style="width:96%; margin:5px auto; position:relative; height: auto; background-color:lightgray;"><form action="file-upload.php" class="dropzone" id="'+dropZoneId+'"></form></div>';
      document.getElementById("div2").appendChild(div.firstChild);           
      var myDropzone = new Dropzone("#"+dropZoneId,{
            paramName: 'file',
            method: 'post',
            maxFiles: 1,
            url: 'file-upload.php',
            dictDefaultMessage: "Drag your images for zone "+val,
            clickable: false,
            maxFilesize: 512,
            uploadMultiple: false,
            addRemoveLinks: true,
            forceFallback:false,
            init: function(){
               // from the doc, quick debug
               this.on("addedfile", function(file) { alert("added file in zone."+val); });
               this.on("maxfilesexceeded", function(file) { alert("File limit 1"); });
               this.on("complete", function(file) {alert(serverReponse);});
               }
            });      
    }
    $(document).ready(function(){
         addDropzone(1);
         addDropzone(2);
        }
       );
    

    【讨论】:

    • 非常感谢您的帮助,但代码仍然保持不变。您将 init:function() 包含在 .options 类中。但在动态添加的情况下它仍然不起作用。当我在静态版本上做同样的事情时,如果一切顺利的话。我想知道 Jquery 代码的放置是否让它无法工作
    • @Parminder 你应该更仔细地观察。代码不会保持不变。你试过这个确切的代码吗?我编辑并指出了差异。要点在于引用选项的方式:Dropzone.options[dropZoneId] 而不是Dropzone.options.myDropzone(根本不使用val
    • 是的,现在我只是尝试了完全相同的方式..它正在做所有事情(上传文件并保存它们)但不承认事件..
    • 什么是a+=而不是a=? ...您是指innerHTML部分(innerHTML += '
      '; 这样..
    • @Parminder 找到了可行的方法。编辑我的答案,看看这个小提琴jsfiddle.net/svNXE
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签