2013-03-04 23 views
2

我提交空表單,並且一個字段無效。比我改變的東西在我的形式(不爲當前的,無效的字段)和代碼中調用驗證了我的無效字段:如果返回true,則有效方法不會清除錯誤消息

$('.myinvalidfield').valid() 

它返回我,這個字段是有效的,但不刪除驗證錯誤消息它。我該怎麼做才能解決它? (我不想手動刪除消息和錯誤類,可以使用設置或JQuery嗎?)

更新。

我有兩個字段,第一個元素不是必需的,第二個只在第一個元素爲空時是必需的。我用這個規則:

首先,需要現場:

required: function (element) { 
     var secondElement = $(selector); 
     var value = secondElement.val(); 
     return value == ""; //if second (not required) field has value, that current element is not required 
    }, 

其次,不是必填字段:

required: function (element) { 
     var secondElement = $(selector); 
     if (secondElement.length == 0) return false; //becouse my forms builds dynamicly 
     secondElement.valid(); //invoke validation for required field 
     return false; 
    } 

此規則的作品,但如果我提交帶有空字段的形式,它告訴我請求的字段出現一個錯誤,並且當我首先更改不需要的字段時,則所有表單都有效,但錯誤消息不會從第二個元素中消失。

+1

有了這個插件,[_by DEFAULT_,錯誤_automatically_清除自己(HTTP: //jsfiddle.net/d55hj/),所以你必須改變一些重要的東西。代碼的其餘部分在哪裏?顯示你的jQuery'.validate()'函數和相關的HTML。 – Sparky 2013-03-04 17:29:04

+0

即使禁用了「onfocusout」和「onkeyup」選項,當調用「.valid()」時,錯誤也會自行清除。請參閱:http://jsfiddle.net/d55hj/1/ – Sparky 2013-03-04 17:35:49

+1

目前尚不清楚你正在嘗試做什麼。通常,我們不會在「required」規則中放置複雜的函數......只是「true」,「false」或「depends」函數。請在此構建一個jsFiddle。 – Sparky 2013-03-04 17:46:07

回答

1

默認情況下,當字段有效時,所有錯誤都會自動清除。

DEMO:http://jsfiddle.net/d55hj/


EDIT

作爲每OP:

「我有兩個字段,不要求第一元件,第二要求 只有當第一個是空的。「

試試這個簡化版本...

$(document).ready(function() { 

    $('#myform').validate({ // initialize the plugin 
     rules: { 
      field2: { 
       required: function() { 
        return $('#field1').is(':blank'); 
       } 
      } 
     } 
    }); 

}); 

HTML

<form id="myform"> 
    <input type="text" name="field1" id="field1" /> 
    <input type="text" name="field2" id="field2" /> 
    <input type="submit" /> 
</form> 

DEMO:http://jsfiddle.net/d55hj/4/


否則,你就必須create a custom method擁有了一切更精確的控制......

$(document).ready(function() { 

    jQuery.validator.addMethod('customrule', function (value, element) { 
     if ($('#field1').val() === "" && $('#field2').val() === "") { 
      return false; 
     } else { 
      $('label.error').hide(); 
      return true; 
     } 
    }, "Please fill out field #2 when field #1 is empty"); 


    $('#myform').validate({ // initialize the plugin 
     groups: { // use 'groups' option to combine both error messages into one 
      name: "field1 field2" 
     }, 
     rules: { 
      field1: { 
       customrule: true 
      }, 
      field2: { 
       customrule: true 
      } 
     } 
    }); 

}); 

工作演示:http://jsfiddle.net/d55hj/7/

+0

非常感謝! – 2013-03-04 18:43:17

相關問題