2011-10-04 107 views
0

我正在使用RSV驗證程序檢查我的表單。想要得到以下工作:假設用戶第一次打開頁面。填充所有文本輸入框後,當用戶第一次點擊#submit_btn時,表單提交功能觸發RSV(驗證器),驗證器檢查是否有任何錯誤。如果沒事,通過ajax發佈數據,否則RSV在alert()的幫助下顯示錯誤消息數組。此程序僅適用於第一次僅當驗證檢查返回true時才通過ajax發佈

BTW:RSV - 驗證程序。如果在驗證過程中沒有發生錯誤,myoncomplete()函數會返回1 ..如果出現錯誤,它會發出警報。得到從here

我不能得到它的工作。請幫我解決邏輯/代碼錯誤。 THX提前

我的JS

var int=null; 
var counter=0; 
function myOnComplete() { 

    return 1; 

} 

$(document).ready(function() { 

$("#add_form").RSV({ 

     onCompleteHandler: myOnComplete, 

     rules: [ 

      "required,name,Page name required", 

      "required,title,Page title required.", 


      ] 

    }); 

$("#add_form").submit(function (e) { 
     e.preventDefault(); 
     dataString = $("#add_form").serialize(); 
     $.ajax({ 
      type: "POST", 
      url: "processor/dbadd.php", 
      data: dataString, 
      dataType: "json", 
      success: function (result, status, xResponse) { 
       //do something if ajax call is success 

       int = setInterval(call, 3000); 
       var message = result.msg; 
       var err = result.err; 
       if (message != null) { 
        $.notifyBar({ 
         cls: "success", 
         html: message 
        }); 
       } 
       if (err != null) { 
        $.notifyBar({ 
         cls: "error", 
         html: err 
        }); 
       } 
      }, 
      error: function (e) { 
       //ajax call failed 
       alert(e); 
      } 
     }); 
}); 
$("#submit_btn").click(function() { 

      if(counter===0){ 
      if(myOnComplete()===1) $('#add_form').submit(); 
      else return false; 
      } 
      else $('#add_form').submit(); 
      counter++; 
      }); 

      $('#autosave').click(function(){ 
       if($(this).is(':checked')){ 
        int = setInterval(call, 3000); 
        $('#submit_btn').attr({'value':'Save&Exit'}); 
       } 
      else{ 
        $('#submit_btn').attr({'value':'Save'}); 
        clearInterval(int); 
       } 
      }); 

}); 

function call() { 
    $('#add_form').submit(); 
} 
+0

澄清我對你的問題的理解。基本上你不希望用戶使用相同的數據通過Ajax兩次提交數據? – Sam

+0

不,我想第一次驗證,如果所有的東西都是通過ajax發佈的,第二次,...只是發佈。所以驗證只是第一次 – heron

回答

1

翻翻它看起來像任何你連接RSV的RSV代碼有其提交的反彈來驗證使用.RSV.validate()

數據作爲在這裏看到:

$(this).bind('submit', {currForm: this, options: options}, $(this).RSV.validate); 
}); 

這意味着,如果你使用.submit( )你在打電話。 RSV.validate也。

因此,一旦您驗證信息嘗試綁定您提交到標準提交功能。

編輯:爲了幫助解釋

當您使用

$("#add_form").RSV({...}); 

JavaScript代碼結合.RSV.validate的RSV()到您的add_form元素的submit事件。提交add_form表單時的含義。在提交之前調用RSV.validate()。

嘗試與不.RSV運行下面的腳本代碼()調用

這個腳本會記錄所有的處理程序add_form元素上的所有事件。您注意到調用$ element.RSV({...})將第二個事件處理程序附加到add_form元素的提交事件。我不確定最佳方式訪問此事件處理程序.unbind()它。祝你好運:)

jQuery.each($('#add_form').data('events'), function(i, event){ 
    jQuery.each(event, function(i, handler){ 
     console.log(handler); 
    }); 
}); 
+0

請修改代碼。你的解決方案對我來說並不明確 – heron

1

OK,我的理解現在你只需要驗證第一組數據,如果用來驗證正確的信任用戶,我得到這個工作的jsfiddle一個易於例如,我想你可以利用這一

http://jsfiddle.net/WqnYa/9/

基本上我做什麼是我趕上提交按鈕點擊,而不是形式提交功能,也許這是可以做到這樣了。我指定了一個類「needsvalidation」,當第一個驗證通過時,我只是刪除該類。如果該類不存在,驗證將不會被初始化由於$(this).hasClass('needval')

如果這不是你要找的是什麼,然後你的問題需要的方式更清晰:(希望這有助於雖然!

+0

Thx。但這不是我的問題的答案。你讀過我的代碼了嗎?我需要解決我的情況。你認爲我不能做你的解決方案這樣的基本事情嗎? – heron

+0

對不起,我爲一個複雜的問題嘗試了一個簡單的解決方案。我的錯。你根本沒有足夠的解釋你的問題。我發現手動或間隔時間內沒有區別,如果間隔問題解釋什麼是不工作的... – Sam

+0

聽:我的驗證器是從這裏http://www.benjaminkeen.com/software/rsv/ jQuery的/。我想要做的很簡單:假設您已經第一次進入該頁面。填充所有文本輸入後,當然你點擊提交按鈕。現在,提交按鈕必須激活驗證過程。如果一切正常RSV通過'myoncomplete()'函數返回true(我將它改爲1)。我只想在表單數據通過驗證成功後才通過AJAX發佈數據。如果不通過,RSV必須警告錯誤消息的數組。現在的問題是,我的代碼發佈的數據沒有檢查驗證結果 – heron