Код то работает, то нет - как так ?
есть вот такой код (см ниже)
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, время: 16:09. |