【问题标题】:Javascript Vars in onclickonclick 中的 Javascript 变量
【发布时间】:2016-02-01 20:54:06
【问题描述】:

所以,差不多我的脚本遇到了问题。 我正在尝试制作一个下载脚本(仅限内存,因此无需使用 HTML/PHP 进行下载,这会导致服务器加载超出我的预期)。 我所做的是从这里 (credit Matěj Pokorný) 获取脚本。 重点是下载一个随机数的txt文件,它被分配了一个var“x”, 这个 x 在同一个脚本中定义。 x 定义为随机数 (1-10 * 1000 FLOORED) 所以下载时它会是 1234.txt。 不幸的是,我不知道如何在 onclick 中定义变量,有人愿意为我解决这个问题吗? 我尝试移动变量并将 's 放在 txt 和整个内容和所有内容周围,但无济于事。 我很抱歉这是多么愚蠢,但也许我疯狂的愚蠢问题可以帮助其他人。

JSFiddle 上的脚本:https://jsfiddle.net/Xevion/btpmweb9/1/

HTML

    <h1>Z</h1>
<p>Z</p>
<button onclick="download(x'.txt', 'Hello world!');" type="button" class="btn btn-lg btn-success btn-block">Download</button>

Javascript

var x = Math.floor((Math.random() * 1000) + 1);function download(filename, text) {
var pom = document.createElement('a');

pom.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text));
pom.setAttribute('download', filename);

if (document.createEvent) {
    var event = document.createEvent('MouseEvents');
    event.initEvent('click', true, true);
    pom.dispatchEvent(event);
}
else {
    pom.click();
}

【问题讨论】:

  • 在你的函数中做所有事情。不要尝试将x'.txt' 传递给它。
  • @Teepeemm 我有点希望我可以在外部做,但是没有其他选择吗?没有办法提及变量并在变量中组合部分文本? (foo= x+(.txt) x=?)

标签: javascript html random download onclick


【解决方案1】:

x'.txt' 不是有效类型,无法被 JS 引擎解析。您想改为执行字符串连接。在你的函数调用中替换为x+'.txt'。

要掌握错误,请在控制台中尝试:

var x = "something";

'.txt'; // 'txt'
x; // 'something'
x'.txt'; // SyntaxError: Unexpected string
x+'.txt'; // 'something.txt'

该脚本也应该包含在button 标记之前,或者至少必须在解析onclick 函数之前定义x。纠正这种情况的一小步可能是将其添加到button上方的任何位置:

<script>var x;</script>

当您单击按钮时,原始脚本将运行,x 将获取其值。

【讨论】:

  • 你忘记了“.”在“.txt”中。
  • @Teepeemm 我可以调整我的代码以适应这个。添加了 var = x 的东西,它不是必需的。我只是想让它在外部可以改变,所以我不必改变所有东西并使其成为内部。
  • @Teepeemm 是的,这取决于脚本的位置;它必须包含在按钮标记之前。
  • @Xevion 您正在评估x,然后再为其赋值。 x 应该在 y 之前分配。
猜你喜欢
  • 2011-10-16
  • 2018-04-23
  • 2011-12-12
  • 1970-01-01
  • 2016-03-20
  • 1970-01-01
  • 2023-01-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多