【问题标题】:How to use a variable created by a javascript function in a hidden field?如何在隐藏字段中使用由 javascript 函数创建的变量?
【发布时间】:2023-03-25 18:18:01
【问题描述】:

我正在使用 formmail.php 中的一项功能,该功能允许我使用隐藏输入来重命名用户上传的文件。这样我可以保留真实公司名称的值,同时从组合文件名中删除非法字符。

我编写了一个函数,它可以进行正确的替换并将新值分配给一个字符串变量,这样我就可以在隐藏的输入中使用。像这样:

<input type="text" id="CompanyName" name="CompanyName" size="60" maxlength="40" onchange="clean(this.value)" required>

<script type="text/javascript">
 cleanName = "";  // variable outside the function meant to be Global
 function clean()
 {
 cleanName = document.getElementById("CompanyName").value.replace(/[/\\/'"*&%$]/g, "");
 }
 </script>

不过,当我尝试使用“cleanName”变量时,它的值显示为空:

<input type="hidden" name="file_names" value="Proof=State.%2D%.cleanName.%'-Paymnt'%.%2D%.Proof" />

文件上传为“NY--Paymnt-FileName.pdf”。

我怎样才能做到这一点?

【问题讨论】:

  • 您究竟想在哪里使用cleanName 变量?作为隐藏输入的值?
  • 正如我上面引用的,在隐藏的输入中:'' 如果我使用原始公司名称,这可以正常工作,如下所示:&lt;input type="hidden" name="file_names" value="Proof=State.%2D%.CompanyName.%'-Paymnt'%.%2D%.Proof /&gt;
  • 您的value 属性上缺少关闭双引号"。不确定这是否会影响您的结果。下面的 trincots 答案肯定会满足您的需求。
  • 打错了,抱歉。

标签: javascript forms variables illegal-characters formmail


【解决方案1】:

您只是将文字 cleanName 放入属性值中,而不是带有该名称的变量的值。

您可以写入隐藏输入的value 属性。

为此,您应该为隐藏输入提供id,例如id=file_names(与name 相同)。

然后把脚本改成这个(忘记全局变量):

function clean() {
     var cleanName = document.getElementById("CompanyName").value
                             .replace(/[/\\/'"*&%$]/g, "");
     cleanName = "Proof=State.%2D%." + cleanName + ".%'-Paymnt'%.%2D%.Proof";
     console.log(cleanName);
     document.getElementById("file_names").value = cleanName
 }

隐藏输入的 HTML 可以没有值:

<input type="hidden" name="file_names" id="file_names">

注意:我不知道你打算用这个值做什么。它看起来很奇怪,但我希望你知道你在服务器端做什么。

【讨论】:

  • 谢谢,trincot,但它没有用。奇怪的是我知道该功能正在运行。我在函数内添加了一个alert(cleanName);,并且 var 显示正确。但是当用作字符串操作数时它仍然是空的。仅供参考,我需要更换,因为有些公司在其名称中使用斜杠。如“LewLara/TBWA”。如果我将文件重命名为“LewLara/TBWA-filename,pdf”,这会造成混乱。
  • 我将分配分成几部分,以便您可以在将最终值分配给输入之前提醒(或更好的 console.log)最终值。不要忘记输入必须有file_names id。它应该可以工作。
  • 非常感谢您建议拆分代码并注销。这就是我发现发生了什么的方式!由于日志显示Proof=State.%2D%.LewLaraTBWA.%'-Paymnt'%.%2D%.Proof,我很惭愧地注意到问题不在这里,而是在formmail.php中。我不必操纵隐藏的输入文件名的值,而是通知formmail.php它需要在操作时使用我的新变量'cleanName'!!你看?所以我添加了一行&lt;input type="hidden" name="cleanName" id="cleanName" /&gt; 并在函数内分配了它的值。成功了!
【解决方案2】:

当你调用函数 clean() 时,你传入一个变量“this.value”,但函数本身不带任何参数。要么引入一个参数,要么停止使用参数调用 clean()。

【讨论】:

  • 谢谢约夫斯基!我是 javascript 编程的新手。我会改变的。
【解决方案3】:

因为我发现了发生了什么,我正在为那些使用 formmail.php 可能遇到相同问题的人添加此信息。

当使用重命名将要上传的文件的功能时,您确实需要定义隐藏的输入“file_names”值作为formmail.php 将使用的参数。如:

<input type="hidden" name="file_names" value="Proof=State.%2D%.cleanName.%'-Paymnt'%.%2D%.Proof" />

问题是当用户键入不能在文件名中使用的非法字符(例如反斜杠)时。

因此,在我的示例中,为了从变量中删除那些非法字符并创建另一个我可以通过 javascript 函数在其他地方使用的变量,我只是定义了一个新的隐藏输入,例如:

<input type="hidden" name="cleanName" id="cleanName" />

然后我在用户输入要修改的值时调用该函数:

<input type="text" id="CompanyName" name="CompanyName" size="60" maxlength="40" onchange="clean()" required>

这样我可以使用 javascript 函数从唯一的用户输入中获取两个值,如下所示(分配拆分):

<script type="text/javascript">
 function clean()
 {
 var newName = document.getElementById("CompanyName").value.replace(/[/\\/'"*&%$]/g, "");
 document.getElementById("cleanName").value = newName;
 }
</script>

我希望这对其他人有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-09
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 2012-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多