C# Javascript函数不会立即运行
我有一些javascript函数,用FileUpload控件检查加载的文件C# Javascript函数不会立即运行,c#,javascript,asp.net,file-upload,C#,Javascript,Asp.net,File Upload,我有一些javascript函数,用FileUpload控件检查加载的文件 <script language="javascript" type="text/javascript"> function CheckFileBeforeUpdate() { var filePath = document.getElementById('<%= this.upFile.ClientID %>').value;
<script language="javascript" type="text/javascript">
function CheckFileBeforeUpdate()
{
var filePath = document.getElementById('<%= this.upFile.ClientID %>').value;
var validExtension = 'xml';
var ext = filePath.substring(filePath.lastIndexOf('.') + 1).toLowerCase();
if (ext == validExtension) return true;
alert('The file extension ' + ext.toUpperCase() + ' is not allowed!');
return false;
}
</script>
它通过按钮调用:OnClientClick=returncheckfilebeforeforeupdate
<asp:Button ID="LoginButton" runat="server" CommandName="Login" Text="Log In"
onclick="LoginButton_Click" OnClientClick="return CheckFileBeforeUpdate();" />
所以出现了不寻常的情况:
我选择了合适的文件,点击登录…尽管扩展不充分,它仍会继续执行下一个功能
否则,如单击文件上载,但选择无文件。
下次我选择一些扩展名不好的文件时,函数运行会显示警报
为什么会有封锁?每次运行更新之前,如何更改CheckFile
编辑
如果我没有选择任何文件,则会显示警报选择要登录的文件;当然然后是锁释放
<script language="javascript" type="text/javascript">
function CheckFileBeforeUpdate()
{
var filePath = document.getElementById('<%= this.upFile.ClientID %>').value;
var popupWindow = document.getElementById('<%= this.popupWin.ClientID %>').value;
if (filePath.length < 1) {
alert("Select file to log in");
return false;
}
var validExtension = 'xml';
var ext = filePath.substring(filePath.lastIndexOf('.') + 1).toLowerCase();
if (ext == validExtension) return true;
alert('The file extension ' + ext.toUpperCase() + ' is not allowed!');
return false;
}
</script>
您只需使用asp验证程序即可:
<asp:FileUpload ID="fu1" runat="server" />
<asp:RequiredFieldValidator ID="req" runat="server"
ErrorMessage="Select file" ControlToValidate="fu1" />
<asp:RegularExpressionValidator ID="rgx" runat="server"
ErrorMessage="Extension not allowed" ControlToValidate="fu1"
ValidationExpression=".*\.[xX][mM][lL]" />
仅根据问题和评论,显而易见的答案是删除这一行:
var popupWindow = document.getElementById('<%= this.popupWin.ClientID %>').value;
popupWindow的值在发布的代码中的任何地方都没有使用,因此似乎不需要行
编辑:
根据评论,我查找了控件。看见我认为这里的问题是,这个控件应该在回发或页面加载后显示,而不是从javascript显示。因为我没有控件,所以我不能确定,但是如果在回发发生之前需要使用Javascript在客户端上显示该控件,那么请尝试查看呈现页面的源代码,看看是否可以找到表示弹出窗口的HTML。希望它位于一个将popupWin.ClientID值设置为id的div中。如果是这种情况,则可以使用此javascript获取对它的引用:
var popupWindow = document.getElementById('<%= this.popupWin.ClientID %>'); //omit the .value
然后,您可以使用您最喜欢的代码来显示popupWindow div。我不会在这里包含该代码,因为如果您不使用jQuery之类的工具,那么如果您希望它在所有浏览器中都能工作,那么正确的答案相当长
<script type="text/javascript">
var validFilesTypes = ["bmp", "gif", "png", "jpg", "jpeg", "doc", "docx", "xls", "xlsx", "rar", "zip", "txt", "pdf"];
function CheckExtension(file) {
/*global document: false */
var filePath = file.value;
var ext = filePath.substring(filePath.lastIndexOf('.') + 1).toLowerCase();
var isValidFile = false;
for (var i = 0; i < validFilesTypes.length; i++) {
if (ext == validFilesTypes[i]) {
isValidFile = true;
break;
}
}
if (!isValidFile) {
file.value = null;
alert("Invalid File. Valid extensions are:\n\n" + validFilesTypes.join(", "));
}
return isValidFile;
}
</script>
就个人而言,我只会使用alert并跳过此控件。它更简单,更容易在所有浏览器中使用。请将其加载到firefox中,查看控制台。如果有错误,IE将继续下一条语句。Fx将不会显示您的代码在Firefox中对我有效。您能否编辑问题并包含您尝试选择的文件的完整路径,该文件的扩展名无效?你能确定没有发生javascript错误吗?看第一条注释?当没有选择文件时,你的代码是如何处理这种情况的?它不会引发异常吗?2种情况:1:选择无文件->登录->验证运行-正确显示警报->然后每个下一个选择的文件都在检查。2:选择坏文件->验证不运行程序转到下一个功能您发布的代码在IE 8和Firefox 3.6中都能正常工作。我想你需要提供更多的信息。您使用什么浏览器进行测试?您是否在Firefox中尝试了错误控制台,以便查看是否有其他错误发生?如果子字符串函数出现异常情况,您选择的确切文件名是什么?完整实现CheckFileBeforeUpdate在第一篇文章中。这是一个来自外部dll的控件-更像WindowsForms中的messageBox。这里可以替换标准的警报窗口。但是,正如我们所看到的——并非总是这样:P在发布更新之前的CheckFileUpdate实现中,需要进行一些修改,您不需要获取对popupWin的引用,因为您在代码中的任何其他地方都不使用popupWin。您是否尝试使用popupWin而不是alert?在popupWin使用的更改之前的版本中。现在我扔了它,但是是的,我试着用它来代替警惕。初始化此控件在codebehind.OK中,所以我想说的是,这里没有足够的信息告诉您出了什么问题,因为我们看不到您试图如何使用popupWinPopupUp是否由第三方控制?你能告诉我们名字吗?这是一些外部控制。EeekSoft.Web.PopupWin.dlladd javascript到标记
<script type="text/javascript">
var validFilesTypes = ["bmp", "gif", "png", "jpg", "jpeg", "doc", "docx", "xls", "xlsx", "rar", "zip", "txt", "pdf"];
function CheckExtension(file) {
/*global document: false */
var filePath = file.value;
var ext = filePath.substring(filePath.lastIndexOf('.') + 1).toLowerCase();
var isValidFile = false;
for (var i = 0; i < validFilesTypes.length; i++) {
if (ext == validFilesTypes[i]) {
isValidFile = true;
break;
}
}
if (!isValidFile) {
file.value = null;
alert("Invalid File. Valid extensions are:\n\n" + validFilesTypes.join(", "));
}
return isValidFile;
}
</script>