我正在使用python的Eel软件包,可帮助我将html / css / js与python集成
所以我根据python文件中的输入通过JS动态生成HTML标签
基本上,这是一个聊天机器人,该聊天机器人的用户界面是由HTML / js创建的
main.js动态创建标签
eel.expose(selectPDF);
function selectPDF(moduleSelection){ // moduleSelection is coming from python
console.log("select pdf called")
var DemoDom = document.createElement("input");
DemoDom.setAttribute('type','file'); //creating tag for input file
DemoDom.setAttribute('name','myfile');
DemoDom.id = "agenttext";
DemoDom.setAttribute('class','selectButton');
DemoDom.setAttribute('multiple','multiple');
DemoDom.setAttribute('onchange','showname("'+moduleSelection+'")')
chatBox.appendChild(DemoDom);
}
eel.expose(showname); //this is eel package syntax
function showname(moduleSelection){
console.log("i am here")
var name = document.getElementsByClassName('selectButton');
var fileList = [];
// if only one file is selected do this
if(name[0].files.length === 1){
console.log("File name: ", name[0].files[0].name)
var temp = name[0].files[0].name;
eel.getFileName(temp,moduleSelection); // passing file to python function getFileName
}
else{
for (var i = 0; i < name[0].files.length; i++) {
console.log("File name for loop: ", name[0].files[i].name)
fileList.push(name[0].files[i].name); // push all file to list
}
eel.getFileName(fileList,moduleSelection); // passing filelist to python function getFileName
}
return
}
现在,当我第一次调用selectPDF()时,它会创建输入标签并调用onchange方法,一切正常
但是现在,当我第二次调用它时,js再次创建输入标签并调用onchange方法,它将使用上一个文件而不是我要选择的新文件
看图片
只需查看文件名:image.png
忽略所有其他红色错误
正如您在图像中看到的那样,当我第一次调用“图像到文本”时,它可以正常工作,可以创建DOM并继续进行操作,但是当我第二次调用“图像到文本”时,它将创建DOM,但选择上一个文件image.png而不是样本.pdf
您可以看到控制台文件名
第二次调用时应选择Sample.pdf而不是image.png
参考方案
似乎您的应用每次都执行此代码
if(name[0].files.length === 1){
console.log("File name: ", name[0].files[0].name)
var temp = name[0].files[0].name;
eel.getFileName(temp,moduleSelection); // passing file to python function getFileName
}
1.指标选择
您是否有理由每次都从name[0]
中选择第一个索引?也许只是检查name.files.length
是否行得通?
2. If / else算法
如果您的代码结构更好一些,则可能会出乎意料地更好地工作。尝试使用Javascript Array.forEach()方法而不是循环。看起来像这样
function showname(moduleSelection) {
console.log("i am here");
var files = document.getElementsByClassName('selectButton');
var fileList = [];
if (files.length > 0) {
files.forEach(file => {
console.log("File name: ", file.files[0].name);
fileList.push(file.files[0].name);
})
eel.getFileName(fileList, moduleSelection);
}
return;
}
希望对您有所帮助!
编辑:
如果要在调用文件后删除以前的文件,则必须将document.getElementsByClassName('selectButton')
中当前选定的文件标记为已调用。
您可以通过多种方式执行此操作,例如将文件名放入selectButton
数组后,将类名从selectButtonDone
更改为fileList[]
。
您可以通过在file.className = 'selectButtonDone';
函数末尾执行files.forEach()
来特别地执行此操作。
我是新手,正在写这篇文章,但是如果源上没有图像,那么我只有空白。有人可以告诉我,如果我正在获取背景图像,如何获取/images/no-image.jpg:url();这是我的代码:<div class="uk-clearfix uk-position-relative"> <div class="recipeb…
对ID为'abc%'的dom执行操作 - javascript我想对ID为'abc%'的DOM进行一些操作<a id='abc1'></a> <a id='abc2'></a> <a id='abc3'></a> <a id='abc4'></a>…
Jsonp没有出现``访问控制允许来源''错误 - javascript在我的PHP中,我喜欢这样来回显jsonp类型的“ json数据”echo $_GET['callback'] . '('.json_encode($arr).')'; 在我的js(angularjs)中,$http.get('http://example.com/app/?callbac…
如何单击没有固定类别值的按钮?但是它有一个固定的'data-testid' - javascript如何单击没有固定类别值的按钮?但是它有一个固定的“数据-testid”。使用JS或Python如何实现?document.getElementById("myCheck").click(); 参考方案 您可以尝试使用querySelector()来使用任何有效的CSS选择器(即属性选择器)。演示:function muFunction()…
Javascript IF语句 - javascript嗨,我有这段代码可以正常工作,并将两个日历显示为一个日历。我还有一个php变量$login_session,其中包含登录电子邮件地址的用户。关于如何显示[email protected]日历的任何想法(伪代码)IF $login_session == "[email protected]…