Pourquoi ma fonction jQuery / Javascript n'est-elle pas appelée correctement avec onsubmit?

J'ai cette fonction jQuery qui utilise une autre bibliothèque jQuery appelée html5csv.js (ce qui explique certains éléments CSV que vous verrez)

Voici:

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; } }); } 

Voici comment j'essaie d'appeler ma fonction, à partir d'une onsubmit sous ma forme:

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

Ma fonction a été soigneusement testée, avec mon regex pour s'assurer qu'elle fonctionnait. Lorsque j'ai décidé de l'implémenter dans mon grand document, et l'envelopper de la function validateNewQuiz(){ //my function here } , elle a cessé de fonctionner.

Je n'ai pas fait mes tests avec la partie onsubmit dans ma forme non plus.

J'ai essayé de le réparer de deux façons. Une façon était comme ceci, en les divisant en deux fonctions:

 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; } } 

Et la deuxième façon, en ajoutant le return dehors de la partie 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; } } 

Quelqu'un a-t-il des suggestions pour savoir pourquoi mon formulaire est toujours soumis, même si ma fonction devrait revenir false ?

Voici une autre édition que j'ai essayé de faire, bien qu'elle soit toujours soumise à mon PHP et que les messages de console ne s'affichent pas puisque cette page est soumise à PHP, donc recharge

 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"); } }); }); 

Html5csv met un gestionnaire d'événements sur l'entrée du fichier afin qu'il ne déclenche que lorsque le fichier est ajouté, vous devez donc définir un indicateur valide quelque part, puis le vérifier avant de soumettre

 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); });