Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript+UNIX中转义字符的问题_Javascript_Html_Unix - Fatal编程技术网

JavaScript+UNIX中转义字符的问题

JavaScript+UNIX中转义字符的问题,javascript,html,unix,Javascript,Html,Unix,我试图为一个系统创建一个自定义按钮,但是浏览器总是给我错误,如果没有,按钮就不能正常工作。我怀疑我没有正确使用逃生操纵器。要么是这样,要么是我的UNIX环境干扰了正确的功能 我已经用多种方法尝试过了,并且记住错误总是一样的:uncaughtsyntaxerror:无效或意外的令牌 fileName=e.target.value.split\\\.pop;抛出错误。这应该是正确的代码,因为这正是我要做的 fileName=e.target.value.split\\\\\\.pop;不会引发错误,

我试图为一个系统创建一个自定义按钮,但是浏览器总是给我错误,如果没有,按钮就不能正常工作。我怀疑我没有正确使用逃生操纵器。要么是这样,要么是我的UNIX环境干扰了正确的功能

我已经用多种方法尝试过了,并且记住错误总是一样的:uncaughtsyntaxerror:无效或意外的令牌

fileName=e.target.value.split\\\.pop;抛出错误。这应该是正确的代码,因为这正是我要做的

fileName=e.target.value.split\\\\\\.pop;不会引发错误,但会使源代码看起来像fileName=e.target.value.split\\\.pop;。这不起作用,因为我只需要一个\反斜杠

代码如下:

选择一个文件 .inputfile{ 宽度:0.1px; 高度:0.1px; 不透明度:0; 溢出:隐藏; 位置:绝对位置; z指数:-1; } .inputfile+标签{ 字号:1.25em; 字号:700; 颜色:白色; 背景色:黑色; 显示:内联块; 光标:指针; } .inputfile:焦点+标签, .inputfile+标签:悬停{ 背景色:红色; } .inputfile:焦点+标签{ 轮廓:1×000; 外形:-webkit聚焦环颜色自动5px; } 我试图做的是让自定义按钮将其innerHtml更改为用户选择的文件名

JSFIDLE只使用两个\反斜杠即可正常工作。这就是为什么我认为UNIX是可疑的-\也是一个特殊字符,表示单字符引号。所有web代码都在这个UNIX环境中运行—我们使用它编译所有内容


有什么想法或替代方案吗?

在某些系统上尝试更改为“\\\”。

在某些系统上尝试更改为“\\\”。

使用/代替\,因为\通常用于转义字符

或者尝试使用\\\这是UNC网络路径路径/文件名

执行替换\为/

使用/代替\,因为\通常用于转义字符

或者尝试使用\\\这是UNC网络路径路径/文件名


执行replace\with/

我已经能够通过将javascript移出unix环境并完全重新编写函数来解决这个问题,这次使用正则表达式替换文件路径字符串:

选择一个文件 讽刺的是,这不起作用——它抛出了未捕获的引用错误:troca没有在HTMLInputElement.onchange中定义。但是,只要它对生产代码有效,对吗


感谢大家的帮助。

我已经能够解决这个问题,方法是将javascript移出unix环境,并完全重新编写函数,这次使用正则表达式替换文件路径字符串:

选择一个文件 讽刺的是,这不起作用——它抛出了未捕获的引用错误:troca没有在HTMLInputElement.onchange中定义。但是,只要它对生产代码有效,对吗


谢谢大家的帮助。

您应该将\/用于UNIX文件系统。

您应该将\/用于UNIX文件系统。

fileName=e.target.value.split\\\\\.pop;使源代码看起来像fileName=e.target.value.split\.pop;但仍然抛出了错误。我真的希望这能奏效。你看过我的答案了吗,但没有一个答案或评论对我有帮助。我的JSFIDLE按预期工作,只是不在生产代码中。是的,我也在搜索这个。奇怪的虫子。四条斜线应该有用。是的,我同意。但不知怎的,它没有,它让我发疯。fileName=e.target.value.split\\\\\.pop;使源代码看起来像fileName=e.target.value.split\.pop;但仍然抛出了错误。我真的希望这能奏效。你看过我的答案了吗,但没有一个答案或评论对我有帮助。我的JSFIDLE按预期工作,只是不在生产代码中。是的,我也在搜索这个。奇怪的虫子。四条斜线应该有用。是的,我同意。但不知怎么的,它没有,它让我发疯。
var inputs = document.querySelectorAll('.inputfile');
Array.prototype.forEach.call(inputs, function(input) {
      var label = input.nextElementSibling,
        labelVal = label.innerHTML;

      input.addEventListener('change', function(e) {
          var fileName = '';
          if (this.files && this.files.length > 1)
            fileName = (this.getAttribute('data-multiple-caption') || '').replace('{count}', this.files.length);
          else
            fileName = e.target.value.split("\\").pop();

              if (fileName)
                label.querySelector('span').innerHTML = fileName;
              else
                label.innerHTML = fileName ? fileName : labelVal;
            });
      });

function troca(){
    var file = document.getElementById("file");
    var nomeArq;
    var fullPath = file.value;
    if (fullPath) {
       var startIndex = fullPath.indexOf('\\\\') >= 0 ? fullPath.lastIndexOf('\\\\') : fullPath.lastIndexOf('/');
       var filename = fullPath.substring(startIndex);
       if (filename.indexOf('\\\\') === 0 || filename.indexOf('/') === 0) {
           filename = filename.substring(1);
       }
       nomeArq = filename;
    } else {
       nomeArq = 'image.jpg';
    }
    nomeArq = nomeArq.replace(/.*[\/\\]/, '');
    var label = document.getElementById('label');
    label.innerHTML = nomeArq;
}