0

我有这个 jQuery 函数,它使用另一个名为 html5csv.js 的 jQuery 库(它解释了您将看到的一些 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;
        }

    });
}

这是我试图从onsubmit我的表单中调用我的函数的方式:

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

我的函数以及我的正则表达式已经过彻底测试,以确保它正常工作。当我决定将它实施到我的大文档中并将其包装起来时function validateNewQuiz(){ //my function here },它就停止了工作。

我也没有对onsubmit表格中的部分进行测试。

有没有人对为什么我的表单总是提交有任何建议,即使我的函数应该返回false

4

2 回答 2

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;
}
于 2013-08-25T20:43:52.603 回答
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;
}
于 2013-08-25T09:51:40.837 回答