Javascript showOpenDialog()刷新窗口
所以,我正在编写一个电子应用程序,在某个时候我需要一个路径名。 在我的渲染器线程(使用jQuery)上,我有以下代码:Javascript showOpenDialog()刷新窗口,javascript,html,node.js,electron,Javascript,Html,Node.js,Electron,所以,我正在编写一个电子应用程序,在某个时候我需要一个路径名。 在我的渲染器线程(使用jQuery)上,我有以下代码: $("#button-that-you-click-for-dialog").click(() => { electron.remote.dialog.showOpenDialog({properties:["openDirectory"]}); }); 它的工作原理是,对话框的显示方式与我预期的完全相同,但是当对话框关闭(确定或取消)时,页面将重新加载,并重置
$("#button-that-you-click-for-dialog").click(() => {
electron.remote.dialog.showOpenDialog({properties:["openDirectory"]});
});
它的工作原理是,对话框的显示方式与我预期的完全相同,但是当对话框关闭(确定或取消)时,页面将重新加载,并重置表单中的其他值。我一生都不明白为什么会发生这种事。以下是我在平台方面得到的信息:
带有Gnome3的Ubuntu 17.04电子1.7.5/铬58.0.3029.110
节点8.5.0 为了记录在案,我甚至不关心到目前为止我还没有任何东西传回值-一旦我修复了这个刷新错误,我将着手解决这个问题。
我想这是很多信息,但如果我遗漏了什么,请告诉我 更新:我添加了一个回调来记录返回的文件路径,但现在窗口在对话框打开时刷新,而不是在对话框关闭时刷新,这意味着在尝试关闭和控制台时。记录结果时,它表示资源已关闭或释放(可能是因为窗口刷新)我现在使用的代码:
const electron = require("electron");
$("#dir").click((event) => {
electron.remote.dialog.showOpenDialog({
properties:["openDirectory"]
}, (filepaths) => {console.log(filepaths);});
})
第二次更新:我试过Siddhesh的代码,效果很好。现在我需要弄清楚index.html的哪一部分触发了刷新(事实证明,在我运行electron的IDE上有一条WebGL控制台消息)
以下是完整的代码:
Index.html:
<!DOCTYPE html>
<html lang="en">
<head>
<script src="../common/jquery.min.js"></script>
<meta charset="UTF-8">
<title>BookRipper</title>
<link rel="stylesheet" href="../common/bootstrap.min.css"/>
<link rel="stylesheet" href="../common/bootstrap-grid.min.css"/>
<link rel="stylesheet" href="../common/bootstrap-reboot.min.css"/>
<link rel="stylesheet" href="../common/css/font-awesome.min.css" />
<link rel="stylesheet" href="index.css"/>
<script src="../common/bootstrap.min.js"></script>
<script src="index.js" type="application/javascript"></script>
</head>
<body>
<div class="jumbotron">
<h3 class="display-4" id="title">New Book</h3>
</div>
<footer class="footer clearfix">
<div class="container">
Sample Text
</div>
</footer>
<div class="container">
<form>
<div class="row mb-2">
<div class="col-sm-3 col-md-2 col-lg-1">
<label for="book-title" class="mt-sm-2">Title</label>
</div>
<div class="col">
<input id="book-title" class="form-control"/>
</div>
</div>
<div class="row mb-2">
<div class="col-sm-3 col-md-2 col-lg-1">
<label for="book-author" class="mt-sm-2">Author</label>
</div>
<div class="col">
<input id="book-author" class="form-control"/>
</div>
</div>
<div class="row mb-2">
<div class="col-sm-3 col-md-2 col-lg-1">
<label for="book-year" class="mt-sm-2">Year</label>
</div>
<div class="col">
<input type="number" id="book-year" class="form-control" value="2000" />
</div>
</div>
<div class="row mb-2">
<div class="col-sm-3 col-md-2 col-lg-1">
<label for="book-n" class="mt-sm-2">Number of disks</label>
</div>
<div class="col">
<input type="number" id="book-n" class="form-control" value="1"/>
</div>
</div>
<div class="row mb-2">
<div class="col-sm-3 col-md-2 col-lg-1">
<label for="dir" class="mt-sm-2">Folder</label>
</div>
<div class="col">
<!-- |||||| This is the button in question |||||| -->
<button id="dir" class="btn">Folder</button>
</div>
</div>
<div class="row mb-2">
<button
type="button"
class="btn btn-link"
data-toggle="collapse"
data-target="#advanced"
onclick="$('#advanced').toggleClass('show'); $('#advanced-icon').toggleClass('fa-plus').toggleClass('fa-minus');">
<i
class="fa fa-plus mr-2"
id="advanced-icon">
</i>
Advanced Settings
</button>
</div>
<div class="collapse" id="advanced">
<div class="row mb-2">
<div class="col-sm-3 col-md-2 col-lg-1">
<label for="bitrate" class="mt-sm-2">Bitrate</label>
</div>
<div class="col">
<div class="input-group">
<input type="number" id="bitrate" class="form-control" value="24" min="16" max="256" step="4" />
<span class="input-group-addon">kbps</span>
</div>
</div>
</div>
</div>
</form>
</div>
</body>
</html>
表单的重置/页面的重新加载不是由electron隐式触发的 代码的某些部分可能会显式触发它,如
$(“#myForm”)[0].reset()
或其他内容
尝试创建一个新的HTML页面,只需呈现下面的代码。这对我来说很好,无需重置表单。如果问题仍然存在,请尝试粘贴完整的代码
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js" onload="window.$ = window.jQuery = module.exports;"></script>
<script>
const {dialog} = require("electron").remote
$(document).ready(function(){
$("#btn1").click((event) => {
dialog.showOpenDialog({ properties:["openDirectory"] },
(paths) => console.log(paths));
});
});
</script>
</head>
<body>
<form action="" id="myForm">
<input type="text" id="inp1">
<input type="text" id="inp2">
<input type="text" id="inp3">
</form>
<button id="btn1">Get Path</button>
</body>
</html>
const{dialog}=require(“electron”).remote
$(文档).ready(函数(){
$(“#btn1”)。单击((事件)=>{
showOpenDialog({properties:[“openDirectory”]},
(路径)=>console.log(路径));
});
});
获取路径
电子不会隐式触发表单重置/页面重新加载
代码的某些部分可能会显式触发它,如$(“#myForm”)[0].reset()
或其他内容
尝试创建一个新的HTML页面,只需呈现下面的代码。这对我来说很好,无需重置表单。如果问题仍然存在,请尝试粘贴完整的代码
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js" onload="window.$ = window.jQuery = module.exports;"></script>
<script>
const {dialog} = require("electron").remote
$(document).ready(function(){
$("#btn1").click((event) => {
dialog.showOpenDialog({ properties:["openDirectory"] },
(paths) => console.log(paths));
});
});
</script>
</head>
<body>
<form action="" id="myForm">
<input type="text" id="inp1">
<input type="text" id="inp2">
<input type="text" id="inp3">
</form>
<button id="btn1">Get Path</button>
</body>
</html>
const{dialog}=require(“electron”).remote
$(文档).ready(函数(){
$(“#btn1”)。单击((事件)=>{
showOpenDialog({properties:[“openDirectory”]},
(路径)=>console.log(路径));
});
});
获取路径
热腾腾。我终于找到了。我的问题是没有指定被单击的按钮的类型。我认为这意味着它默认为“提交”或“重置”。当我把它设置为“按钮”时,它就不再让我提神了,我可以继续我的快乐之路了。Hot dang。我终于找到了。我的问题是没有指定被单击的按钮的类型。我认为这意味着它默认为“提交”或“重置”。当我将其设置为“按钮”时,它不再为我刷新,我可以继续我的快乐之路。感谢您的帮助-我尝试了您的代码,它工作正常。所以,这不是我的系统,也不是我的linux安装或其他任何有趣的东西,这很好。我将用完整的代码编辑这个问题。因为问题仍然存在于我的原始页面中,所以我添加了完整的代码。我还尝试去掉其中的所有脚本和css(Bootstrap、JQuery等),只留下标记和调用open对话框的js,但仍然不起作用。啊!我想不出来!谢谢你的帮助-我试过你的代码,它很有效。所以,这不是我的系统,也不是我的linux安装或其他任何有趣的东西,这很好。我将用完整的代码编辑这个问题。因为问题仍然存在于我的原始页面中,所以我添加了完整的代码。我还尝试去掉其中的所有脚本和css(Bootstrap、JQuery等),只留下标记和调用open对话框的js,但仍然不起作用。啊!我想不出来!我的天啊,同样的事情也发生在我身上,非常感谢你发布这篇文章!我花了好几个小时想弄明白为什么会这样。这感觉像个虫子。。。(或者是鼓励我们编写正确HTML的一种非常积极的方式)完美的abc
工作成功了吗!我花了好几个小时想弄明白为什么会这样。这感觉像个虫子。。。(或者是一种鼓励我们编写正确HTML的非常积极的方式)Perfectabc
完成了这项工作