2013-12-23 35 views
0

我有一個文件上傳表單,我通過javascript在最終提交表單之前檢查文件大小。表單工作正常,當我嘗試上傳超過上述大小的文件時,它會在第一時間顯示正確的警報。但是如果我再次點擊上傳而沒有選擇另一個文件,我會得到相同的警報兩次。如果我再次重複這個過程,我會收到3次警報。下面是代碼在使用jQuery時提交多次執行的函數

<script>  
var flag=0; 
$('#filename').bind('change', function() { 
var filesiz = this.files[0].size; 
if (filesiz >10485760) 
{flag=1;} 
else 
{flag=0;} 
}); 

function upfunc(){ 
    $('#smalldata').hide(); 
    $('#invalidfile').hide(); 
    $('#invalidfile9').hide(); 
    if($("#UserComments").hasClass("textAreaField valid") && $("#filename").hasClass("valid")){ 
    $('#loading_image').show(); // show animation 
    $("#uploadsfrm").submit(function() { 
    if(flag==1) 
    {alert ('File size cannot exceed 10 MB.'); 
    $('#loading_image').hide(); 
    return false; 
    //event.preventDefault(); 
    } 
    else 
    return true; 
    }); 
    } 
} 
</script> 

我想錯誤可能是因爲我使用綁定。任何幫助將非常感激。謝謝

+0

如果你不選擇另一個文件,同樣的文件仍然被選中,那麼爲什麼你會期望有不同的結果? – adeneo

+0

但我不是能夠理解爲什麼第二次我收到警報兩次,然後是第三次警報增加到三次我又怎麼能解決這個問題? –

+0

那是因爲你把事件處理程序放在一個函數中,並且每次都是upfunc ()運行時,會添加一個新的事件處理程序,並且會彈出另一個警報,其中包含兩個,然後是三個等。 – adeneo

回答

2

你有一個多事件在這裏調用。 每次調用upfunc()時,都會附加一個Submit事件。 你可能會考慮要麼宣佈一次提交事件或使用$("#uploadsfrm").unbind('submit')$("#uploadsfrm").submit(function()....

所以實際上,先請您將有1個事件偵聽器,第二個呼叫你會附加其他事件,現在總計爲2..there直到無限。 e.preventProgration或StopDefault不會幫助,因爲它是相同的對象,因此它不會停止事件的調用。 即使它會幫助,它只是一個不好的代碼:(

+0

謝謝。取消綁定功能取得了訣竅。現在它的工作非常好。 –