Код то работает, то нет - как так ?
есть вот такой код (см ниже)
main висит на кнопке submit так вот, иногда всё работает как надо, иногда просто ничего не происходит при нажатии кнопки, только поля формы очищаются в логе пусто, никаких ошибок нет при этом, как назло, если открыта консоль, то практически всегда работает. а если нет, то не работает минимум в половине случаев. браузер IE 11 подскажите плиз, в чем может быть дело, куда копать ?
function WriteFile(fileObj) {
const filePath = "C:\\__WORK\\";
// const fileName = "doc.txt";
console.log("write file");
var fso = new ActiveXObject("Scripting.FileSystemObject");
var filename = filePath + fileObj.name;
var FilePointer = fso.OpenTextFile(filename, 8, true);
FilePointer.Write( fileObj.data );
FilePointer.Close();
};
function send(filename, docid, keyname, storename) {
var url = "http://127.0.0.1/test?"+
"filename="+encodeURIComponent(filename);
window.open(url, "_blank");
}
function main() {
const selectedFile = document.getElementById('inputfile').files[0];
var writerFunc = WriteFile;
var sendFunc = send;
const reader = new FileReader();
reader.onload = function() {
var file = new Object();
file.name = selectedFile.name;
file.data = reader.result;
writerFunc(file);
sendFunc(file.name);
};
reader.readAsArrayBuffer(selectedFile);
};
|
Цитата:
Попробуйте понять, что происходит, когда ничего не происходит. |
Цитата:
поставил вот так
function main() {
console.log("main");
//....
в консоли пусто :( сам HTML вот
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>test</title>
</head>
<body>
<form onsubmit="main()">
<div><input type="file" id="inputfile"></div>
<br/>
<div>DocId: <input type="text" id="docid" size="100"></div>
<br/>
<div><input type="submit" value="Send"></div>
</form>
<div id="result"></div>
</body>
</html>
<script type="text/javascript" src="./scripts/test.js"></script>
|
spin,
а что это? Ведь такое в веб странице будет работать только с разрешения. |
Дело в том, выход из функции main происходит раньше, чем отработает загрузка файла. После этого происходит "отправка" формы. Так как action не указан, то просто происходит перезагрузка страницы.
Нужно ev.preventDefault() или return false в main. У меня нет ИЕ сейчас, но вот так все работает до new ActiveXObject("Scripting.FileSystemObject");
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>test</title>
<script>
function WriteFile(fileObj) {
const filePath = "C:\\__WORK\\";
// const fileName = "doc.txt";
console.log("write file");
var fso = new ActiveXObject("Scripting.FileSystemObject");
var filename = filePath + fileObj.name;
var FilePointer = fso.OpenTextFile(filename, 8, true);
FilePointer.Write( fileObj.data );
FilePointer.Close();
};
function send(filename, docid, keyname, storename) {
var url = "http://127.0.0.1/test?"+
"filename="+encodeURIComponent(filename);
window.open(url, "_blank");
}
function main(ev) {
var selectedFile = document.getElementById('inputfile').files[0];
var writerFunc = WriteFile;
var sendFunc = send;
ev.preventDefault()
const reader = new FileReader();
reader.onload = function() {
var file = new Object();
file.name = selectedFile.name;
file.data = reader.result;
writerFunc(file);
sendFunc(file.name);
};
reader.readAsArrayBuffer(selectedFile);
};
document.addEventListener('DOMContentLoaded', () => {
document.querySelector('form').addEventListener('submit', main)
})
</script>
</head>
<body>
<form>
<div><input type="file" id="inputfile"></div>
<br/>
<div>DocId: <input type="text" id="docid" size="100"></div>
<br/>
<div><input type="submit" value="Send"></div>
</form>
<div id="result"></div>
</body>
</html>
|
Цитата:
я же ставил в самом начале main console.log и он не отрабатывал как вы пишите попробовал, тоже не заработало т.е. до preventDefault просто не доходит сделал без submit и формы всё сразу работает с первого раза
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>test</title>
</head>
<body>
<div><input type="file" id="inputfile"></div>
<br/>
<div>DocId: <input type="text" id="docid" size="100"></div>
<br/>
<button onClick="main()">Send</>
<div id="result"></div>
</body>
</html>
<script type="text/javascript" src="./scripts/test.js"></script>
странности какие-то |
Цитата:
Тогда строку 49 в моем коде document.addEventListener('DOMContentLoaded', () => { Заменить на document.addEventListener('DOMContentLoaded', function () { |
| Часовой пояс GMT +3, время: 03:20. |