我试图点击隐藏的输入file
。我已经对它进行了测试here并且它运行良好。
在实际项目中,我收到此错误Uncaught RangeError: Maximum call stack size exceeded
。
这就是我所拥有的:
HTML:
<div id="upload-image-container" class="upload-image-container inline-block">
<h2 class="inline-block">+ Upload Your Photo!</h2>
<input type="file" name="images" id="images" />
</div>
jQuery的:
jQuery("#upload-image-container").click(function() {
// e.preventDefault();
jQuery("input[type='file']").click();
});
我已尝试添加e.preventDefult
或e.preventImmediatePropagation
,但我仍然遇到同样的错误。
我不确定如何才能真正解决这个问题。
我在file
输入上有一个监听器...图像会自动上传。不确定是否是造成问题的原因。我尝试删除它,我最终得到了相同的结果。
input.addEventListener("change", function (evt) {
var i = 0, len = this.files.length, img, reader, file;
for ( ; i < len; i++ ) {
file = this.files[i];
if (!!file.type.match(/image.*/)) {
if ( window.FileReader ) {
reader = new FileReader();
reader.onloadend = function (e) {
// showUploadedItem(e.target.result, file.fileName);
jQuery("#filename").val(file.name);
};
reader.readAsDataURL(file);
}
if (formdata) {
formdata.append("images[]", file);
}
}
}
if (formdata) {
jQuery.ajax({
url: "upload.php",
type: "POST",
data: formdata,
processData: false,
contentType: false,
success: function (res) {
// document.getElementById("response").innerHTML = res;
}
});
}
}, false);
答案 0 :(得分:5)
写这个,
jQuery("input[type='file']").click(function(e){
e.stopPropagation();
});
由于孩子造成的事件传播,该错误正在提高。只是阻止它。
答案 1 :(得分:0)
如果我理解正确,则只有在单击h2
标记时才需要触发点击事件。
在这种情况下,直接在h2
标记中添加标识符。
<h2 id="uploadTagId" class="inline-block">+ Upload Your Photo!</h2>
并在您的script.js中附加新标识符上的click事件。
$("#uploadTagId").click(function(e){
jQuery("input[type='file']").click();
});