【问题标题】:Change event not fired after uploading a file into a textarea将文件上传到文本区域后未触发更改事件
【发布时间】:2022-11-20 07:43:09
【问题描述】:

在使用 jQuery 的 html 中,我有一个文本区域和一个输入(类型=文件)。上传文件并将内容插入文本区域后,不会触发文本区域的更改事件。为什么?

<textarea id="textarea" style="width:100%" rows=10></textarea><br>
<input type="file" accept=".txt" id="upload"><br>
<div id="text-structure">...</div>
$(document).ready(function document_loaded() {
  $("#upload").change(function() {
    var f = $('#upload')[0].files[0];
    if (!f) return;
    var r = new FileReader();
    r.onload = function(e) {
      $('#textarea').val(e.target.result);
    }
    r.readAsText(f);
  });
  $("#textarea").on('change keyup paste', function() {
    const l = $("#textarea").val().length;
    $("#text-structure").html("Text length: " + l);    
  });
});

https://jsfiddle.net/pegast/4ndtcry8/

【问题讨论】:

    标签: jquery file events input


    【解决方案1】:

    这是因为当您使用.val() 以编程方式设置纹理的值时,它不会触发您附加到纹理的任何事件(更改/键盘/粘贴)。您将必须手动触发这些事件之一才能使其正常工作,例如:

    $('#textarea').val(e.target.result).trigger('change');
    

    请参见下面的示例:

    $(document).ready(function document_loaded() {
      $("#upload").change(function() {
        var f = $('#upload')[0].files[0];
        if (!f) return;
        var r = new FileReader();
        r.onload = function(e) {
          $('#textarea').val(e.target.result).trigger('change');
        }
        r.readAsText(f);
      });
    
      $("#textarea").on('change keyup paste', function() {
        const l = $("#textarea").val().length;
        $("#text-structure").html("Text length: " + l);    
      });
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <textarea id="textarea" style="width:100%" rows=10></textarea><br>
    <input type="file" accept=".txt" id="upload"><br>
    <div id="text-structure">...</div>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-14
      • 1970-01-01
      • 2019-03-27
      • 2010-11-01
      • 1970-01-01
      • 2015-03-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多