2013-08-25 108 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

相关问题