2014-06-12 104 views
10

我使用Dropzone.js将文件上传到服务器。我在我的悬浮窗maxFiles参数设置多达10个,我是试过这样:如何禁用Dropzone.js可点击表单?

$('.dropzone').dropzone({ 
    maxFiles: 10, 
    init: function() { 
     this.on('maxfilesreached', function() { 
      $('.dropzone').unbind('click'); 
     }); 
    } 
}); 

...但不工作。从.dropzone或任何其他方式删除clickable以防止用户添加更多文件的解决方案是什么?

+1

更好的方法在这里http://stackoverflow.com/a/19057630/1178072 – zsitro

+0

@zsitro是的。这是一个很酷的方法。但我不明白这是如何禁用可点击的表单(提出的问题)。我错过了什么? – bloodyKnuckles

+1

@netdjw优秀的问题。可点击的属性似乎也没有工作。 – kstratis

回答

1

这里我们去,根据下面的评论进行更新。

如何禁用悬浮窗“点击打开文件对话框”事件达到MAXFILES时:

$('.dropzone').dropzone({ 
    maxFiles: 10, 
    init: function() { 
     this.on('maxfilesreached', function() { 
      $('.dropzone').removeClass('dz-clickable'); // remove cursor 
      $('.dropzone')[0].removeEventListener('click', this.listeners[1].events.click); 
     }); 
    } 

我不知道this.listeners[1]的“1”有多可靠,但是这是点击这里事件函数存在于我当前的dropzone配置中。

+0

我想仅在用户激活'maxfilesreached'事件后禁用。这对我来说不是一个好的解决方案。 – netdjw

+0

我一直在试验'maxfilesexceeded',但是在maxFiles被超过后,即在添加文件#11后,它似乎会触发。 – bloodyKnuckles

+0

和'maxfilesreached'事件监听器有什么关系?当我添加第10个文件时,我认为这起火了。是? – netdjw

2

Dropzone对象上有一个选项字段,名称为clickable,默认为true

根据您的场景,您可以在注册Dropzone实例时将其设置为false,或者可以根据需要在运行时更新值。

+1

你可以设置它,但它什么都不做。 Dropzone仍然是可点击的。 –

9

这工作完美!并适用于4.0.1

//disable the click of your clickable area 
$(".dz-hidden-input").prop("disabled",true); 

//enalbe the click of your clickable area 
$(".dz-hidden-input").prop("disabled",false); 
+1

这就是我正在寻找的 – ChrisB

+0

为我做了诀窍,+1 – Eman

23

你为什么不只是使用CSS来禁用Click事件。 达到最大文件时,Dropzone会自动添加一个dz-max-files-reached类。

使用CSS来对悬浮窗关闭点击: .dz-max-files-reached { pointer-events: none; cursor: default; }

+0

这应该是公认的答案 - 这是我见过的最优雅的解决方案。 – huwiler

+0

@XuDing优秀的答案。我一直在寻找一种能够实现这个目标的方法,但没有运气。 CSS做到了!谢谢。 – kstratis

+4

当显示“删除链接”时,另外使用'.dz-remove {pointer-events:all;光标:默认; }'让他们点击。 – Atan

4
myDropzone.on('maxfilesreached', function() { 
    myDropzone.removeEventListeners(); 
}); 
myDropzone.on('removedfile', function (file) { 
    myDropzone.setupEventListeners(); 
}); 

不要忘了初始化_updateMaxFilesReachedClass,如果你从你的服务器所拥有的文件。

myDropzone._updateMaxFilesReachedClass()