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

问题描述:

我正在使用formmail.php中的一个功能,它允许我使用隐藏的输入来重命名用户上传的文件。这样,我可以保留真实公司名称的价值,同时从组合文件名称中删除非法字符。如何在隐藏字段中使用由javascript函数创建的变量?

我已经写了一个函数来做适当的替换,并将新的值赋给一个字符串变量,所以我可以使用隐藏的输入。就像这样:

<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” 。

我该如何做这项工作?

+0

你究竟在哪里试图使用'cleanName'变量?作为隐藏输入的价值? –

+0

正如我上面引用的,在隐藏输入内部: '' 如果我使用原始公司名称,如下所示: '' – mehrlich

+0

您的'value'属性缺少结尾双引号'''。不确定这是否会影响您的结果。在下面的trincots答案肯定会做你想要的。 –

您刚刚将文字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"> 

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

+0

谢谢,trincot,但它没有奏效。 奇怪的是我知道该功能正在运行。我在函数内部添加了一个alert(cleanName); var显示正确。但用作字符串操作数时它仍然是空的。 仅供参考,我需要更换,因为有些公司在其名称中使用了斜杠。如“LewLara/TBWA”。如果我将文件重新命名为“LewLara/TBWA-filename,pdf”,会造成混乱。 – mehrlich

+0

我把这个任务分成几部分,这样你可以在它被分配到输入之前提醒(或者更好的console.log)最终值。不要忘记输入必须具有'file_names'标识。它应该工作。 – trincot

+0

非常感谢您提出的拆分代码并检查注销的建议。这就是我发现发生了什么事!由于日志显示'Proof = State。%2D%.LewLaraTBWA。%' - Paymnt'%。%2D%.Proof',我惭愧地注意到这个问题不在这里,而是在formmail.php中。我不必操纵隐藏输入文件名的值,而是通知formmail.php它需要在操作中使用我的新变量'cleanName'!你看?所以我添加了一行''并在函数中赋值。有效! – mehrlich

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

+0

谢谢yovsky!我是JavaScript编程新手。我会改变这一点。 – mehrlich

因为我知道发生了什么,我将这些信息添加到使用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函数的唯一的用户输入有两个值,这样的(assignement splited):

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

我希望这可以帮助别人。