我已成功创建一个HTML表单,该表单从用户获取文件,并允许为该文件指定名称。我还成功创建了一个javascript函数,可以从上传流中获取文件名,只有名称(没有路径和扩展名)。 问题是,我有点无法改变用于重命名上传的输入,就像我想要的那样。以下是具有两个示范警报的工作功能:
<script type="text/javascript">
function updateInput(val) {
som = val.split('\\')[val.split('\\').length - 1];
som = som.split('.')[0];
alert('Hey 1');
fileName.value = som;
alert('Hey 2');
}; </script>
显示“Hey 1”警报,没关系。 “嘿2”实际上是不显示! fileName是文件名称的输入的名称和 id ,我 DID 尝试使用document.getElementById ('fileName')。value = ...但没有运气。
fileName声明:
<input type="text" runat="server" id="fileName" name="fileName" />
javascript位于此输入下的代码中。 uploadImage输入(文件类型)高于此输入。 (是的,事件被调用,而som获得了我希望它拥有的值)
* 我正在尝试更改input:text元素的值。我会尝试变种。
谢谢你,如果你能帮助的话!
答案 0 :(得分:2)
据我了解您的问题,下面的代码应该可以正常工作:
<script type="text/javascript">
function updateInput(val) {
var som = val.split('\\')[val.split('\\').length - 1];
som = som.split('.')[0];
alert('Hey 1');
document.getElementById('<%=fileName.ClientID %>').value = som;
alert('Hey 2');
}; </script>
由于runat="server"
,浏览器中元素的ID与您在.aspx
文件中看到的ID不同。 HTML元素的ID将类似于CotentPlaceholder1_fileName
,因此document.getElementById('fileName')
将无法找到它,document.getElementById('fileName').value = son;
将引发错误。
与fileName.value = som;
同样的问题 - 据我所知,你正在尝试使用IE的功能(不确定它是否只是IE的功能,我只是从不使用它,但请记住,有类似的东西)使用元素ID在全局命名空间中创建变量。 ID与fileName不同,因此变量名也不同。
要获得runat="server"
元素的ID,就像它将在浏览器中一样,您可以使用服务器端对象的.ClientID
属性。
此外,您应该使用var
在函数范围内定义变量。像var som = val.split('\\')[val.split('\\').length - 1];
一样。这样它在全局范围内(updateInput
函数之外)不可见。否则你将来可能会遇到问题