如何在隐藏字段中使用由javascript函数创建的变量?

时间:2016-08-23 18:17:51

标签: javascript forms variables illegal-characters formmail

我正在使用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”。

我该如何做到这一点?

3 个答案:

答案 0 :(得分:2)

您刚刚将文字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 } 相同)。

然后将脚本更改为此(忘记全局变量):

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

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

<img src="trend_g.php?element_3=$queue&month=$std_mm&year=$std_yy" />

<img src="trend_g.php?element_3=Apple&month=06&year=2016" />

注意:我不知道你将如何处理这个价值;它看起来很奇怪,但我希望你知道你在服务器端做了什么。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

由于我发现了正在发生的事情,因此我将使用formmail.php为那些可能遇到同样问题的人添加此信息。

当使用重命名将要上传的文件的工具时,你真的需要定义隐藏的输入&#34; file_names&#34;值为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函数的唯一用户输入中获得两个值,就像这样(assignement splited):

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

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