2013-08-25 179 views
0

我有一個使用另一個jQuery庫稱爲html5csv.js這個jQuery的功能(這也解釋了一些東西,CSV文件,你會看到)爲什麼我的jQuery函數沒有被正確調用?

這裏是:

function validateNewQuiz() 
{ 
    CSV.begin("#upload_csv").go(function(e,D) 
    { 
     if (e) 
     { 
      return console.log(e); 
      alert("Sorry, an error occured"); 
     } 

     var s = ""; 


     for (var i = 0; i <= D.rows.length - 1; i++) 
     { 
      s +=D.rows[i].join(','); 
      s += "\n"; 
     } 

     var fullString = s; 

     if(/^(([^,]+,){4}[^,]+\n){3}$/.test(fullString)) 
     { 
      return true; 
     } 
     else 
     { 
      return false; 
     } 

    }); 
} 

這裏是我在嘗試我的表單中調用我的功能,從onsubmit

<form method="post" action="createplay.php" onsubmit="return validateNewQuiz();" enctype="multipart/form-data"> 

我的功能已經經過全面測試,與我正則表達式一起,以確保它在工作。當我決定將其實施到我的大文檔中,並將其包裝在function validateNewQuiz(){ //my function here }周圍時,它停止工作。

我沒有在我的表格中使用onsubmit部分進行測試。

有沒有人有任何建議,爲什麼我的表單總是提交,即使我的函數應該返回false

+1

您從傳入'go()'的回調函數返回'true'或'false',所以'validateNewQuiz'實際上返回undefined。如果CSV庫是異步的(看起來像這樣),您將無法在onsubmit處理程序中以這種方式使用它。 –

+1

no preventDefault –

+0

@MattGreer - 你有其他的選擇嗎?我需要在Javascript發佈到我的'PHP'之前用Javascript驗證我的表單客戶端。 – Fizzix

回答

0

onsubmit事件處理程序允許提交如果驗證功能通過true值,則繼續執行,如果接收到false值,則不允許繼續進行提交。在你的情況下,內部函數返回一個真或假的值,但是這個值沒有被傳遞給外部的validateNewQuiz函數,所以驗證的真/假結果沒有被傳遞給onsubmit事件處理程序。要解決這個問題,只需返回CSV函數的值。

function validateNewQuiz() 
{ 
    var csvValidation = CSV.begin("#upload_csv").go(function(e,D) 
    { 
     if (e) 
     { 
      return console.log(e); 
      alert("Sorry, an error occured"); 
     } 

     var s = ""; 


     for (var i = 0; i <= D.rows.length - 1; i++) 
     { 
      s +=D.rows[i].join(','); 
      s += "\n"; 
     } 

     var fullString = s; 

     if(/^(([^,]+,){4}[^,]+\n){3}$/.test(fullString)) 
     { 
      return true; 
     } 
     else 
     { 
      return false; 
     } 

    }); 
    return csvValidation; 
} 
0

你可以讓一個按鈕,就會調用你的函數:

<button onclick="validateNewQuiz()">Submit</button> 

...並提交表單一旦被驗證:

function validateNewQuiz() 
{ 
    CSV.begin("#upload_csv").go(function(e,D) 
    { 

     //... 

     if(/^(([^,]+,){4}[^,]+\n){3}$/.test(fullString)) 
     { 
      $("form").submit(); 
     } 
    }); 
    return false; 
} 
相關問題