2013-05-28 86 views
1

我試圖用jQuery validation remote method檢查一個值是唯一 的規則上提交,以防止它在每一次擊鍵jQuery驗證不等待遠程規則

var Id = $("#id").val(); 

$('#form').on('submit', function (e) { 
    e.preventDefault(); 
    var newValue = $('#input').val(); 

$('#input').rules('add', { 
    'remote': { 
     url: '/MyController/CheckValue', 
     type: 'POST', 
     data: { 
      id: Id, 
      value: newValue 
     } 
    }, 
    messages: { 
     'remote': 'This value is not valid' 
    } 
}); 

if ($('#form').valid()) { 
    window.console.log('valid') 
    // do something 
} 

$('#input').rules('remove', 'remote'); 
}); 

的行動被解僱添加返回true假後服務

[HttpPost] 
public JsonResult CheckValue(int? id, string value) 
{ 
    bool available; 
    using (var myServiceClient = new MyServiceClient()) 
    { 
     available = myServiceClient.IsValueAvailable(id, value); 
    } 
    return this.Json(available); 
} 

規則的呼叫工作正常,但$('#form').valid()返回true每次因爲它沒有等待遠程規則來完成它的調用。

This post建議在遠程規則聲明中使用async: false,但會凍結瀏覽器。 documentation中的示例沒有使用它,所以它應該沒有它。

我的驗證規則有問題嗎?

回答

0

按照documentation你應該直接連接的規則和驗證方法的形式和使用submitHandler回調,像這樣:

$('#form').validate({ 
    rules: { 
     inputName: { 
      remote: { 
      url: '/MyController/CheckValue', 
      type: 'POST', 
      data: { 
       id: Id, 
       value: newValue 
      } 
     } 
    }, 
    messages: { 
     inputName: { 
      remote: 'This value is not valid' 
     } 
    }, 
    submitHandler: function(form){ 
     // Do Stuff with Form 
    } 
} 

我希望這有助於!

+0

關閉...該方法被稱爲'.validate()'不''.validation()'。 – Sparky

+0

@Sparky好的,趕上!回答編輯。 – dSquared

+0

感謝您的回答,但我忘了提及我使用jQuery驗證與MVC不顯眼的驗證相結合,所以這一步已經完成了這個插件,並且不顯眼的驗證工作正常。 我只想將新規則添加到表單上的現有驗證,它適用於傳統規則,但不適用於遠程規則:表單在遠程驗證的結果之前進行驗證。 –