2

在 Node-Webkit 网站 ( https://github.com/rogerwang/node-webkit/wiki/File-dialogs ) 上,它说使用<Input type="file">来调出文件选择器对话框,然后监听change事件以获取选择或指定的路径和文件名。

这在我第一次指定或选择文件名时工作正常,但如果我再次打开文件选择器并使用相同的文件名,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>

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

谢谢。

4

3 回答 3

0

在没有看到更多代码的情况下,我会冒险猜测并建议:

jQuery('#export_file').trigger('change');

希望这可以帮助,

乔纳森

“使用 node-webkit 创建 Windows 应用程序”

于 2013-08-15T03:55:27.440 回答
0

由于您的“处理程序”仅在标签看到更改时才被调用,因此您可以重置它(在进行处理之后 - 在本例中为警报调用),以便每次都像第一次一样。但是,如果您“重置”输入标记,则会触发更改事件,因此您需要 (1) 删除更改​​事件侦听器,(2) 将输入标记重置为未定义和 (3) 恢复更改事件侦听器。使用新的 node-webkit 0.7.0 File 和 Filelist 构造函数——这只适用于 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 桌面应用程序”

于 2013-08-15T14:25:35.647 回答
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();
});
于 2014-12-12T18:40:09.957 回答