2016-04-23 117 views
0

我有一个表单,我想在我提交时使用mixpanel跟踪一些属性。如果验证返回false,如何停止通过mixpanel提交表单?mixpanel跟踪表单提交与验证

这是我的代码一般。

我简单的形式

<form id="form" action="..." method="post" role="form"> 
    // my elements here 
    <input type="submit" value="Submit" /> 
</form> 

我的脚本

<script> 
    function(){ 
     mixpanel.track_forms("form", "MyEventName", getProperties()); 
     $("form").submit(SubmitForm); 

     function getProperties(){ 
      // get properties here 
     } 

     function SubmitForm() { 
      if (SomethingNotRight()) { return false; } 

      return true; 
     } 
    } 

我的问题:

我希望在我的SubmitForm功能,通过SomethingNotRight功能验证之后,它会停止提交。但是,即使SubmitForm返回false,表单仍会提交给服务器,我发现这是因为mixpanel.track_form

我用mixpanel.track_form的原因是为了避免形式之间的竞争条件提交和mixpanel提交为debugging mixpanel track form

回答

1

我可以肯定地了解这里的问题,原因是track_forms只是设计用于默认使用情况立即提交表单。如果你有一个过程(在这种情况下是验证),你应该基本上做你自己的实现。 track_forms的想法是识别提交的表单,记录事件,等待一段时间以便事件可以保存,然后继续。从这个意义上说,你可以这样做:

(function(){})(
    var theForm = $("#form"), 
     readyToProceed = false; 

    //listen for the submition 
    theForm.submit(function(e){ 
     if(!readyToProceed){ 
      e.preventDefault(); 
      processSubmit(); 
     } 
    }); 

    function processSubmit(){ 
     //validation process 
     if (SomethingNotRight()) { return false; } 

     //we are all good, lets proceed 
     mixpanel.track("Form submitted"); 
     readyToProceed = true; 
     window.setTimeout(function(){ theForm.submit() }, 300); 
    } 

);