在Node-Webkit网站(https://github.com/rogerwang/node-webkit/wiki/File-dialogs)上,它说要使用<Input type="file">
打开文件选择器对话框,然后监听change
事件以获取路径和文件名选择或指定。
这在我指定或选择文件名时第一次正常工作,但如果我再次调出文件选择器并使用SAME文件名,则change
事件不会被触发!仅当我在选择器对话框中更改文件名时才会触发更改事件。以下是一个例子:
<input id="export_file" type="file" nwsaveas style="display:none" nwworkingdir=""/>
<script>
var chooser = jQuery("#export_file");
chooser.change(function(evt)
{
alert(jQuery(this).val());
});
chooser.trigger('click');
</script>
在用户从文件选择器中选择文件后,是否有人知道总是触发事件的方法(无论该文件先前是否被选中或定义过)?
感谢。
答案 0 :(得分:0)
如果没有看到更多代码,我会冒险猜测并建议:
jQuery('#export_file').trigger('change');
希望这有帮助,
乔纳森
“使用node-webkit创建Windows应用程序”
答案 1 :(得分:0)
由于您的“处理程序”仅在标记看到更改时被调用,您可以重置它(在执行处理之后 - 在这种情况下为警报调用),以便每次都像第一次一样。但是,如果“重置”输入标记,则会触发更改事件,因此您需要(1)删除更改事件侦听器,(2)将输入标记重置为undefined,以及(3)恢复更改事件侦听器。 使用新的node-webkit 0.7.0文件和文件列表构造函数 - 这只适用于v0.7.0 - 以下代码应该可以工作。
<script>
var chooser = jQuery("#export_file");
function fileHandler (evt) {
alert(jQuery(this).val());
var f = new File('','');
var files = new FileList();
files.append(f);
chooser.unbind('change');
document.getElementById('export_file').files = files;
chooser.change(fileHandler);
}
chooser.change(fileHandler);
chooser.trigger('click');
</script>
乔纳森
“使用node-webkit创建Windows桌面应用程序”
答案 2 :(得分:0)
我只需清除输入上的文件对象就能使其工作。类似的东西:
<input id="save" type="file" nwsaveas="graphdata.csv" style="display:none" accept=".csv"/>
和
$('#save').on('change', function (e) {
console.log(this.value);
this.files.clear();
});