javascript - 为什么在文件输入上触发单击事件也会触发表单上的提交事件?

标签 javascript jquery html forms file-upload

我正在对 HTML 表单中的文件输入进行换肤。我通过隐藏输入来实现结果,然后我设计了自己的按钮并在该按钮上单击,我触发隐藏输入上的单击事件,以打开 native 浏览窗口。这是可行的,但是当我关闭浏览窗口时,表单上会触发 Javascript 提交处理程序(但实际上没有发生提交,仅触发了事件)。

我准备了一把 fiddle :http://jsfiddle.net/Ebcu5/

HTML:

<form id="form">
    <input id="file" type="file" name="photo" />
    <button id="upload">Browse</button>
</form>

JS:

$("#form").submit(function(){
    alert('submit event triggered');
});

document.getElementById('upload').addEventListener('click',function(){
    var evt = document.createEvent("HTMLEvents");
    evt.initEvent("click", true, true);
    uploading = true;
    document.getElementById('file').dispatchEvent(evt);
});

CSS:

input#file { position: fixed; top: -100px; }
button { border: solid 3px black; border-radius: 3px; font-size: 18px; line-height: 20px; text-transform: uppercase; font-family: Arial; line-height: 31px; background: #fd6706; border-radius: 13px; }

最佳答案

已解决。只需在上传点击事件处理程序中使用 evt.preventDefault() 即可。

更新的 fiddle :http://jsfiddle.net/Ebcu5/2/

document.getElementById('upload').addEventListener('click',function(evt){
                evt.preventDefault();
    document.getElementById('file').click();
});

关于javascript - 为什么在文件输入上触发单击事件也会触发表单上的提交事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20229088/

相关文章:

javascript - Chrome 视频标签翻译后渲染不正确

javascript - React——点击按钮定时器开始计时

javascript - 无法删除 DOM 中没有元素或标签的文本

jQuery 重新应用 native 不支持的 CSS 规则(例如在 IE 中)

html - Github Pages 服务器会允许 .htaccess 和 .htpasswd 吗?

php - 投票脚本(注册和未注册用户)的最佳做法是什么?

javascript - $(this) div 中标题的 jQuery 选择器

javascript - 网页上的音频

javascript - 无法弄清楚为什么 javascript 在我的 php 文件中不起作用

html - 下拉菜单将所有 <Div> 移动到下面。如何预防?