Node-Webkit SaveAs文件对话框仅触发唯一文件名?

时间:2013-08-15 03:14:26

标签: javascript node-webkit

在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>

在用户从文件选择器中选择文件后,是否有人知道总是触发事件的方法(无论该文件先前是否被选中或定义过)?

感谢。

3 个答案:

答案 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();
});