为什么我的jQuery/Javascript函数不能通过onsubmit正确调用?

为什么我的jQuery/Javascript函数不能通过onsubmit正确调用?,javascript,jquery,forms,csv,onsubmit,Javascript,Jquery,Forms,Csv,Onsubmit,我有一个jQuery函数,它使用另一个jQuery库html5csv.js(这解释了您将看到的一些CSV内容) 这是: function validateNewQuiz() { CSV.begin("#upload_csv").go(function(e,D) { if (e) { return console.log(e); alert("Sorry, an error occured");

我有一个jQuery函数,它使用另一个jQuery库html5csv.js(这解释了您将看到的一些CSV内容)

这是:

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

    });
}
我的函数和正则表达式都经过了彻底的测试,以确保它正常工作。当我决定将其实现到我的大文档中,并将其包装在
函数validatenewquick(){//my function here}
周围时,它停止了工作

我也没有在表格中的提交部分进行测试

我试着用两种方法来修复它。一种方法是这样的,将它们分成两个函数:

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;
    }
}
是否有人对为什么我的表单总是提交有任何建议,即使我的函数应该返回
false

这里是我试图进行的另一次编辑,尽管它仍然提交到我的PHP,并且由于该页面提交到PHP,因此没有显示
控制台
消息,因此重新加载

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

    });
});
jQuery(“#newQuizID”)。单击(函数(e)
{
e、 预防默认值();
CSV.begin(“#upload_CSV”).go(函数(e,D)
{ 
如果(e)
{
返回控制台.log(e);
警报(“对不起,发生了错误”);
}
var s=“”;

对于(var i=0;ihtml5csv),在文件输入上放置一个事件处理程序,因此它仅在添加文件时触发,因此您需要在某处设置一个有效标志,然后在提交之前进行检查

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);
});
功能检查ValidCSV(e){
var isValid=jQuery(#form-step2”)。数据(“hasValidData”);
if(typeof(isValid)!=“未定义”&&isValid){
jQuery(“#form-step2”).submit();
}否则{
//执行您想在此处执行的任何无效数据CAL
警报(“csv文件无效,因此我不提交表格”);
e、 预防默认值();
}
}
函数csvFileLoaded(e,D){
如果(e){
返回控制台.log(e);
警报(“对不起,发生了错误”);
}
var s=“”;

对于(var i=0;我在
go
回调函数内部运行良好,
只在回调函数内部返回true/false,因此它们必须在回调函数外部,就像第二次尝试一样,
go
函数是异步函数吗?如果是,则对
fullString
的检查将无法工作,因为它不会被设置,因为函数立即返回,并让工作在后台进行,使检查时未设置
fullString
。@PatrickEvans-我相信这是一个异步函数,是的。还有其他方法吗?请看我的答案,你想使用单击处理程序而不是onsubmittanks。一个问题,什么是停止我的任务因为这是在我的表单中,所以PHP不会发布到它自己。
method=“post”action=“createplay.PHP”
。“submit”只是通过编程而不是手动提交表单,所以“action”中的url仍然使用。那么,在调用Javascript之前,在开始时按下
提交
按钮时,是什么阻止了
操作
的使用呢?在
单击
事件中,您将看到
e.preventDefault()
,e这里是对事件对象的引用,这可以防止事件的默认操作发生,在这种情况下,它会阻止表单的提交,单击事件发生在提交事件之前,并且由于在单击事件中调用了
preventDefault
,它会阻止触发
submit
。我刚刚测试了它.虽然,它仍在我的PHP中发布…有什么建议吗?
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");
        }

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