2011-02-13 45 views
1

我有一些功能JavaScript來檢查加載文件,FileUpload控件JavaScript函數不跑一次

<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 =「返回CheckFileBeforeUpdate(;

<asp:Button ID="LoginButton" runat="server" CommandName="Login" Text="Log In" 
      onclick="LoginButton_Click" OnClientClick="return CheckFileBeforeUpdate();" /> 

所以這是不尋常的情況: 我選擇appropiate文件,單擊登錄......儘管擴展不足它繼續下一個功能

否則我。 f I例如單擊FileUpload,但不選擇文件。 下一次我選擇一些文件(即使有不好的擴展名),然後功能運行(顯示警報)。

爲什麼有像封鎖一樣的東西?我能做些什麼來改變CheckFileBeforeUpdate()每次運行?

編輯 如果我選擇沒有文件有顯示警報(「選擇文件登錄」);當然。然後鎖釋放

<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> 
+2

請將它加載到Firefox中,在控制檯中查找。如果出現錯誤,IE將繼續下一個聲明。 Fx不會 – mplungjan 2011-02-13 15:11:34

+0

您的代碼在Firefox中適用於我。您是否可以編輯問題幷包含您嘗試選擇具有無效擴展名的文件的完整路徑?你能確定沒有發生javascript錯誤(請參閱第一條評論)? – rsbarro 2011-02-13 16:21:42

+0

沒有選擇文件時,代碼如何處理替換?它不會拋出異常嗎? – gor 2011-02-13 16:38:00

回答

1

的問題和意見僅僅根據,明顯的答案是隻刪除這一行:

var popupWindow = document.getElementById('<%= this.popupWin.ClientID %>').value; 

popupWindow的值不在發佈代碼中的任何位置使用,所以看起來該行不是必需的。

編輯:

根據評論,我查了一下控制。見this link。我認爲這裏的問題是,這個控件是爲了在回發或頁面加載後顯示的,而不是來自javascript。由於我沒有控制,所以我不能確定,但​​如果在回發發生之前需要使用Javascript在客戶端上顯示此控件,請嘗試查看呈現頁面的源代碼,然後查看是否可以找到HTML代表彈出窗口。希望它是在一個div中,將popupWin.ClientID值設置爲id。如果是這樣的話,那麼你可以使用這個JavaScript來得到一個參考吧:

var popupWindow = document.getElementById('<%= this.popupWin.ClientID %>'); //omit the .value 

然後,您可以使用自己喜歡的代碼以顯示popupWindow股利。我不會在這裏包含這些代碼,因爲如果你不使用類似jQuery的東西,如果你希望它在所有的瀏覽器中都能正常工作,那麼正確的答案是相當長的。

就我個人而言,我只是使用alert()並跳過這個控制。它更簡單,更有可能在所有瀏覽器中工作。

1

你可以只用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]" /> 
0
<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>