2013-08-25 115 views
0

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

這裏是:

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部分進行測試。

我試着用兩種方法修復它。一個辦法是這樣的,他們分成兩個功能:

var fullString = ""; 
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"; 
    } 

    fullString = s; 
}); 


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

而第二種方式,通過添加return外的CSV部分:

var fullString = ""; 
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"; 
     } 

     fullString = s; 
    }); 

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

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

這裏是另一個編輯,我試圖讓,但它仍然是提交給我的PHP並自該頁面被提交到PHP不被顯示console的消息,因此重裝

jQuery("#newQuizID").click(function(e) 
{ 
    e.preventDefault(); 

    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)) 
     { 
      console.log("Working"); 
      jQuery("#form-step2").submit(); 
     } 
     else 
     { 
      console.log("Not Working"); 
     } 

    }); 
}); 
+0

以及裏面的'go'回調之前檢查它的'returns'唯一回報回調函數內的真/假所以他們必須在第二次嘗試之外,它是'go'函數的異步函數?如果是這樣的話,那麼針對'fullString'的檢查就不會工作,因爲它不會被設置,因爲該函數會立即返回並讓工作在後臺進行,從而在檢查時未設置'fullString'。 –

+0

@PatrickEvans - 我相信這是一個異步功能,是的。有沒有其他的方法呢? – Fizzix

+1

看到我的答案,你想使用點擊處理程序,而不是onsubmit –

回答

1

html5csv放在文件輸入一個事件處理程序,所以只有當觸發文件被添加,所以你需要的地方設置一個有效的標誌,然後提交

function checkValidCSV(e) { 
    var isValid = jQuery("#form-step2").data("hasValidData"); 
    if(typeof(isValid) != "undefined" && isValid) { 
     jQuery("#form-step2").submit(); 
    } else { 
     //Do whatever invalid data cals you want to do here 
     alert("csv file was invalide so i am not submitting the form"); 
     e.preventDefault(); 
    } 
} 

function csvFileLoaded(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)){ 
     console.log("Valid Data"); 
     jQuery("#form-step2").data("hasValidData",true); 
    } else { 
     console.log("Invalid Data"); 
     jQuery("#form-step2").data("hasValidData",false); 
    } 
} 

jQuery(document).ready(function() { 
    CSV.begin("#upload_csv").go(csvFileLoaded); 
    jQuery("#newQuizID").click(checkValidCSV); 
}); 
+0

謝謝你。一個問題,什麼是阻止我的PHP發佈到自身,因爲這是在我的形式'方法=「後」操作=「createplay.php」' – Fizzix

+0

'.submit'只是以編程方式提交表單而不是手動,因此URL中的「行動「仍在使用。 –

+0

那麼,甚至在調用Javascript之前,在開始時按下'submit'按鈕時,什麼是停止使用'action'? – Fizzix

相關問題