javascript - 如何使用 *.txt 文件作为输入值?
问题描述
我有两个按钮...单击时,它们会在输入字段中显示一些文本。我使用一些简单的 javascript 来选择要显示的文本,在按钮下定义的文本id="blabla1"
或按钮下的文本id="blabla2"
。是否可以显示在外部.txt
文件中定义的文本?
在输入按钮下定义为值的文本可以正常工作:
<input type="hidden" id="SupSite1Title" value="Subsite1 Title!"><br>
但我想要txt
文件中的文本。
<body>
<div id="leftnav">
<ul>
<li><input type="text" id="TextField1"><br><br></li>
</ul>
</div>
<div id="rightnav">
<ul>
<li><button id="blabla1" onclick="myFunction1()">Side1</button></li>
<li><button id="blabla2" onclick="myFunction2()">Side2</button></li>
</ul>
</div>
<input type="hidden" id="SupSite1Title" value="Subsite1 Title!"><br>
<input type="hidden" id="SupSite2Title" value="Subsite2 Title!"><br>
<script>
function myFunction1() {document.getElementById("TextField1").value =document.getElementById("SupSite1Title").value;
}
</script>
<script>
function myFunction2() {document.getElementById("TextField1").value =document.getElementById("SupSite2Title").value;
}
</script>
解决方案
如果你想显示.txt
文件的文本内容......你可以使用一个名为FileReader API 的 API(你需要检查你的浏览器是否支持)
这是你如何做到的:
更新 :
var file1 = document.getElementById('file1');
var file2 = document.getElementById('file2');
document.getElementById('bOne').addEventListener("click", function(){getFile(file1)})
document.getElementById('bTwo').addEventListener("click", function(){getFile(file2)})
function getFile(target) {
const input = target;
if ('files' in input && input.files.length > 0) {
placeFileContent(
document.getElementById('display'),
input.files[0])
}
}
function placeFileContent(target, file) {
readFileContent(file).then(content => {
target.value = content
}).catch(error => console.log(error))
}
function readFileContent(file) {
const reader = new FileReader()
return new Promise((resolve, reject) => {
reader.onload = event => resolve(event.target.result)
reader.onerror = error => reject(error)
reader.readAsText(file)
})
}
label {
display : block;
margin-top : 40px;
margin-bottom : 20px;
}
<label for="file1">Upload file 1 : </label>
<input type="file" accept=".txt" id="file1" name="file1">
<label for="file2">Upload file 2 : </label>
<input type="file" accept=".txt" id="file2" name="file2">
<button id="bOne">Display file1</button>
<button id="bTwo">Display file2</button>
<label for="file2">Selected file : </label>
<input type="text" id="display" for="display">
方法 N°2(从服务器获取数据):
function fetchData(buttonNumber) {
var btn1 = document.getElementById('b1')
var btn2 = document.getElementById('b2')
var display = document.getElementById('display')
//fetching data
if (buttonNumber == 1) {
//replace 'file1.txt' with your file URL
fetch('file1.txt').then(x => {
x.text().then(function(text) {
display.value = text
});
})
} else {
//replace 'file2.txt' with your file URL
fetch('file2.txt').then(x => {
x.text().then(function(text) {
display.value = text
});
})
}
}
#b1,
#b2 {
display: block;
margin: 40px;
}
<button id="b1" onclick="fetchData(1)">Get file 1 and show it</button>
<button id="b2" onclick="fetchData(2)">Get file 2 and show it</button>
<label for="file2">Selected file : </label>
<input type="text" id="display" for="display">
推荐阅读
- ruby - 当我指定不这样做时,为什么我的代码将单词大写?
- angular - 如何让 DataTable 从外部选择中选择/突出显示而不将焦点设置在数据表上?
- matlab - 如何在MATLAB中堆叠一系列图像
- nestjs - 如何使用 DTO 将响应设置为招摇响应中的数组
- firebase - Firebase 云功能未发布
- java - Java - 仅包含字符串的重载构造函数的问题
- c++ - 二维 std::array 的列表初始化
- c# - C# ILogger 不打印控制台输出
- electron - eletron 'download-progress' 没有任何作用
- javascript - odoo 12中的表单视图