javascript - input[file] 包裹在 Label 内时不可聚焦

标签 javascript jquery html css

我想更改默认文件[输入] 外观。所以我包裹在这样的标签里

<label class="btn upload-dir-btn btn-file">
Browse <input type="file" required id="dir-pic-file" name="dir-pic-file" novalidate>
</label>

我在提交表单时进行一些验证。但是当我得到错误时

An invalid form control with name='dir-pic-file' is not focusable.

这是隐藏默认文件的css

#dir-pic-file{
display: none;

但如果我删除 css,它就可以正常工作。这是我的验证

$('#add-dir-form').on('submit',function(e){

  var file = $('#dir-pic-file').val();
    if (file = '') {
        $('#pic-error').css({'display':'block'});
    }

    e.preventDefault();
    });

最佳答案

Firefox 允许您在 display:none 中操作文件输入,而 Chrome 却不允许。它需要是 visibility:hiddenopacity:0 然后移出页面,这样它就不会妨碍。请参阅使用 visibility:hiddenposition:absolute; 的代码段,通过单击红色箭头在两个浏览器中对其进行测试(这可能需要几次,因为我将箭头放在附近,就像在提示...)好的,现在更新很明显。

$('#add-dir-form').on('submit', function(e) {

  var file = $('#dir-pic-file').val();
  if (file = '') {
    $('#pic-error').css({
      'display': 'block'
    });
  }

  e.preventDefault();
});
body {
  position: relative
}

#dir-pic-file {
  visibility: hidden;
  /* or opacity:0;*/
  position: absolute;
  top: -500px;
}

.btn-file {
  border: 3px inset black;
  position: absolute top:50px;
  left: 50px;
  cursor: pointer;
  border-radius: 16px;
  padding: 0 6px;
}

.btn-file::before {
  content: '\1f882';
  font-size: 20px;
  color: red;
  vertical-align: baseline;
  line-height: .6
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<label class="btn upload-dir-btn btn-file">
Browse <input type="file" required id="dir-pic-file" name="dir-pic-file" novalidate>
</label>

关于javascript - input[file] 包裹在 Label 内时不可聚焦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42417556/

相关文章:

javascript - 悬停时的过渡按钮

javascript - Ajax 导致 500 内部服务器错误

javascript - 打印一个div的内容

javascript - 通过将鼠标悬停在另一个图像上来隐藏动画图像

javascript - 显示属于同类型ID的Listview标记

javascript - 静态网页上的日期更新客户端

javascript - jQuery .load seo 对谷歌蜘蛛友好吗?

javascript - Cypress - 从 json 响应体中获取值

javascript - window.innerWidth 不能在 IE7 上工作。如何通过 JS 和 jQuery 修复?

html - 将 CSS 应用于网站的特定部分