2012-05-05 57 views
2

我在我的應用程序中使用客戶端驗證rails gem v3.1.0。我有一個窗體顯示在需要驗證的jQuery對話框中。客戶端狀態驗證在該表單上啓用。一切正常與驗證,但當用戶取消對話框(不提交),我想清除任何現有的驗證錯誤。這樣,當用戶再次觸發對話框時,驗證錯誤不會出現在表單上。清除客戶端驗證欄中的錯誤消息gem

我試圖通過觸發對話框關閉的每個元素的客戶端狀態驗證通過事件來實現這一點 - 它通過刪除包裝錯誤字段和標籤來工作。一個問題是,在此代碼之後,後續驗證無效。我覺得綁定的事件被刪除,不再被觸發。

有沒有更好的方法來實現這一目標?

我的jQuery的對話框:

$('#create_dialog').dialog({ 
      height: 260, 
      width: 420, 
      title: "title", 
      buttons: {"<%= I18n.t("create") %>": function(e) { 
       $('#new_segment').submit(); 
       }, 
       Cancel: function() { 
        var form = $('#new_segment'); 
        form.find('[data-validate]:input').each(function() { 
         $(this).trigger('element:validate:pass'); 
        }); 
        $(this).dialog("close"); 

        } 
       } 
     }); 
+0

究竟得到了一個解決方案? –

回答

1

不能改變一個乾淨的方式,但這個工程

/** 
* Remove Embedded validation perfectly that is compatible with validation gem 
* @param field 
* @returns {boolean} 
*/ 
function removeValidationMessage(field) { 
    var $field = $(field) || field; 
    /** 
    * First wrap the previously occurring label in wrapper div with class 'field_with_errors' 
    * Then Wrap the field within a wrapper div of same class 
    * Then add validation message after the field with class name 'message' 
    */ 
    if ($field.siblings('.message').length > 0) { 
    $field.parent().prev('.field_with_errors').find('label').unwrap(); 
    $field.unwrap(); 
    $field.next('.message').remove(); 
    return true; 
    } 
    return false; 
}