2013-08-25 5 views
0

У меня есть эта функция JQuery, который использует другой JQuery библиотеки под названием html5csv.js (который объясняет некоторые вещи, CSV вы увидите)Почему моя функция jQuery не называется правильно?

Вот он:

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?

+1

Вы возвращаете 'true' или' false' из функции обратного вызова, которая передается в 'go()', поэтому 'validateNewQuiz' фактически возвращает undefined. Если библиотека CSV асинхронна (и выглядит так, как есть), вы не сможете использовать ее таким образом в обработчике onsubmit. –

+1

no preventDefault –

+0

@MattGreer - Есть ли у вас другие альтернативы? Мне нужно проверить мою клиентскую часть формы с Javascript, прежде чем она будет отправлена ​​на мой 'PHP'. – Fizzix

ответ

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; 
} 
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; 
} 
Смежные вопросы