javascript - 如果用户在没有选择文件的情况下打开并关闭它,如何防止将输入文件加倍

标签 javascript jquery html css

我想当用户选择一个文件时会创建另一个输入文件但是当用户打开它并关闭它而不选择文件然后他再次打开它并选择一个时我的代码会创建两个输入如果他打开和关闭 3 次,然后选择一个,创建了 4 个输入。 如果他第一次选择了一个文件,那么只会创建一个


<div class="gal-stf">
    <input class="plus-n" type="file">
      <p class="bt"></p>
  </div>
      <div class="ad-photo" style="display: none;">

      <div class="gal-stf">
    <input class="plus-n" type="file">
          <p></p>
  </div>
          </div>


$(".gal").on("click", ".plus-n", function () {

              var el = $(this).val();
              $(this).change(function () {
        $('.gal').append($('.ad-photo .gal-stf').last().clone(false));
                  $(this).prop('disabled' , 'disabled');
                  $(this).siblings('p').text(this.value);
      });
    });

最佳答案

实际上,它的发生是因为您在每次点击时都绑定(bind)了事件处理程序,所以 3 单击意味着 3 个不同的处理程序,每个都会在更改事件发生时触发。使用事件委托(delegate)代替监听点击事件直接监听更改事件。

$(".gal").on("change", ".plus-n", function() {
  $('.gal').append($('.ad-photo .gal-stf').last().clone(false));
  $(this).prop('disabled', 'disabled');
  $(this).siblings('p').text(this.value);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="gal">
  <div class="gal-stf">
    <input class="plus-n" type="file">
    <p class="bt"></p>
  </div>
  <div class="ad-photo" style="display: none;">

    <div class="gal-stf">
      <input class="plus-n" type="file">
      <p></p>
    </div>
  </div>
</div>

关于javascript - 如果用户在没有选择文件的情况下打开并关闭它,如何防止将输入文件加倍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55641032/

相关文章:

javascript - 如何使用 jQuery UI Datepicker 选择日历上的特定日期来触发函数

jquery - 嵌套子菜单中的 javascript/jquery 事件链接

java - 在 servlet 响应中正确写入 HTML 页面

javascript - 我可以在 scrolltop 中使用百分比作为值吗?

javascript - 如何在函数内附加 html 元素

javascript - "Access is Denied"在同一域的 IE9 中的 contentDocument

javascript - 使用 $(this) 查询下一个相邻选择器

jquery - 指定导航栏中所选选项卡的样式

javascript - 从脚本中排除一个 URL

javascript - 如何对 JavaScript 函数中的每个参数执行某些操作?