0

我已经成功创建了一个 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>

显示“嘿 1”警报,没关系。“嘿2”居然没有显示!fileName 是文件名输入的名称id,我尝试使用 document.getElementById(' fileName ').value = ... 但没有运气。

文件名声明:

<input type="text" runat="server" id="fileName" name="fileName" />

javascript 位于此输入下的代码中。uploadImage 输入(文件类型)在此输入上方。(是的,事件被调用并且 som 得到了我想要的值)

*我正在尝试更改 input:text 元素的值。我会尝试 var 的事情。

如果您能提供帮助,谢谢!

4

1 回答 1

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文件中看到的不同。HTML 元素的 ID 将类似于CotentPlaceholder1_fileName,因此document.getElementById('fileName')不会找到它并document.getElementById('fileName').value = son;会引发错误。

同样的问题fileName.value = som;- 据我了解,您正在尝试使用 IE 的功能(不确定它是否是 IE 独有的功能,我只是从不使用它,但请记住有类似的东西)在全局命名空间中创建变量使用元素的 ID。ID 与文件名不同,因此变量名也不同。

要获取一个runat="server"元素的 id,就像它在浏览器中一样,您可以使用.ClientID服务器端对象的属性。

此外,您应该使用var在函数范围内定义变量。喜欢var som = val.split('\\')[val.split('\\').length - 1];。这样它就不会在全局范围内(updateInput函数之外)可见。否则,您将来可能会遇到问题

于 2012-12-18T11:48:16.410 回答