javascript - 输入文件选择不会一致触发更改事件

标签 javascript jquery html

我有一个文件输入框,允许用户从本地文件系统中选择文件。然后该文件被读入文本区域。我知道只有当输入字段不再处于焦点状态时才会发生更改事件。但是,我的应用程序的行为不一致。有时,在用户选择文件后,输入会正确失去焦点,有时却不会。我不知道如何在用户选择文件后强制输入失去焦点。我的代码:

HTML:

<div class="form-group pull-left">
   <input type="file" id="scriptFile" class="form-control input-sm inputfile">
   <label for="scriptFile"><div class="glyphicon glyphicon-open"></div><span> Choose a Script&hellip;</span></label>
</div>

Main.js:

$("#scriptFile").change(function(event) {
    var file = event.target.files[0];
    // Just updates the "select a file" button to display the selected file's name.
    $("#scriptFile").next('label').find('span').html(" " + event.target.value.split( '\\' ).pop());
    var reader = new FileReader();
    reader.onload = function(event) {
        editor.setValue(event.target.result);
        editor.clearSelection();
    };
    reader.readAsText(file);
    $('#scriptFile').addClass("selected"); //CSS purposes
    editor.focus();
});

如何确保用户从本地系统中选择文件后,焦点将从输入中移除以正确触发更改事件?

更新:问题与选择相同文件有关,而不是焦点。文件输入仍然具有旧文件值...并且由于它不是更改,因此不会触发更改事件。所以,现在我需要了解如何使用 jQuery 清除文件输入值。

更新:已解决!需要添加以下内容才能将事件更改为清除值:

$('#scriptFile').closest('form').get(0).reset();

最佳答案

未触发更改事件,因为如果未清除文件输入值并且用户再次选择同一文件,则不会发生任何更改。读入文件后,使用以下命令清除文件输入值:

$('#scriptFile').closest('form').get(0).reset();

这将确保如果用户再次选择同一文件,则更改事件将触发,因为该值现已重置。

关于javascript - 输入文件选择不会一致触发更改事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35301160/

相关文章:

jquery - 带有国旗的国家的货币下拉菜单

javascript - 未捕获的语法错误 : Unexpected end of input Google Maps API

javascript - 当放置多个表达式时 ng-disabled 会失败

javascript - 如何通过附加图标提高 jQuery 性能?

javascript - Wordpress 模板 div 未展开

javascript - jQuery Mobile 延迟加载列表项

html - 填充顶部表现出奇怪的行为

javascript - 如何通过函数体范围使用函数中的参数变量?

Jquery - 恢复更改的占位符?

html - CSS3多列将图像分成几个部分