国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

jQuery Validation Engine驗證控件調用外部函數驗證的方法

2019-11-19 17:52:59
字體:
來源:轉載
供稿:網友

在使用jQuery Validation Engine的時候,我們除了使用自帶的API之外,還可以自己自定義正則驗證。自定義正則驗證上一篇已經講過了,如果想使用自定義函數進行驗證怎么辦?其實這個控件有個bug,在api中說

也就是在我們需要進行驗證的地方加上funcCall[自定義函數名],但是我們會發現總會報錯,說找不到你這個函數名。其實它的要求是要添加required進行綜合驗證,也就是validate[required,funcCall[yorn]],這樣它才識別我們的自定義函數。但是我們就是不想要required這個呢?或者說我們在符合某種條件下才想讓required這個非空驗證功能生效呢?

 <textarea class="m-area add-tw validate[funcCall[yorn]]" id="remark" cols="30" rows="10" ></textarea>

那么就需要使用以下幾種方法綜合施行,網上老外的解決辦法就是在函數中push一個required,可以讓其正常執行。

我定義了一個yorn的函數,而基本格式就是function yorn(field, rules, i, options){},其中field代表的是你驗證的那個元素,我這里驗證的是textarea,那么field就代表的是textarea。

首先我講一下我要實現的功能,我的需求是在點擊不通過且備注為空的時候觸發驗證,提示“必須填寫內容”。那么在通過備注為空,通過備注不為空,不通過備注不為空的情況下都不能觸發驗證提示信息。而如果validate[required]這樣的話,只要不填寫備注信息都會觸發提示信息。所以我的思路是,當點擊保存按鈕的時候判斷,點擊的是哪個radio,點擊不通過的時候給不通過的radio添加一個自定義屬性,同時賦值。而當點擊通過radio的時候刪除這個自定義屬性。然后接著進入驗證,也就是進入自定義函數,獲取到不通過radio的自定義屬性值,獲取到備注的value,然后判斷這兩個條件是否同時成立,如果條件成立,則首先rules.push('required');因為我們前面說了如果想要實現自定義函數驗證必須要有required,然后接著return options.allrules.required.alertText; 這句話是什么意思呢?就是返回你要提示的信息。而這個提示信息則另有地方進行設置。

html文件,validate[funcCall[yorn]]設置自定義函數validate[funcCall[自定義函數名]]

<form id="approval">//這個驗證控件必須有form      <div class="name-ipt">        <div class="m-name"><span>意見:</span></div>        <input type="radio" name="trial" class="m-radio col" />通過        <input type="radio" name="trial" class="m-radio col" id="nocheck"/>不通過      </div>      <div class="name-ipt"></div>      <div class="area-ipt add-td">        <div class="m-name"><span>備注:</span></div>        <textarea class="m-area add-tw validate[funcCall[yorn]]" id="remark" cols="30" rows="10"></textarea>        <span class="m-span add-stl">剩余可輸入1000字</span>      </div>    </div></form><div class="add-sb">   <a href="#" class="save-btn m" ng-click="saveAudit()" >保存</a></div>(有效:步驟1)

因為我是用的angular,所以給保存一個事件,在點擊保存的時候觸發事件,然后判斷兩個radio哪個被checked,其他的上面說過。接著觸發驗證進入自定義函數中。、、

//自己js文件中寫//保存          $scope.saveAudit = function(){            if($('#nocheck').attr('checked')){              $("#remark").attr("trialAttr",'N');            }else{              $("#remark").removeAttr('trialAttr');            }            if($('#approval').validationEngine('validate')){//驗證通過的話之后要執行的內容}}(有效:步驟2)

自定義函數必須帶rules.push('required');同時return options.allrules.required.alertText;這個自定義函數寫在自己的js文件里就行

//自己的js文件中寫function yorn(field, rules, i, options){    var trialAttr = field.attr("trialAttr") ;    var textareaval = field.val();    if(trialAttr == "N" && textareaval==''){      rules.push('required');      return options.allrules.required.alertText;    }}(有效:步驟3)

接下來要設置自定義提示信息了,找到jquery.validationEngine-zh_CN.js文件,然后在最下面自己跟隨一個對象,函數名在前面,后面alertText后跟你要提示的信息。這樣就OK了。

//這個在jquery.validationEngine-zh_CN.js中寫

(有效:步驟4)

之前我在這個文件的下面按照api自定義了一個函數,但是發現根本無法執行,因為當進入驗證的時候,首先判斷validate[required,funcCall[yorn]]的自定義函數中是否存在required,如果不存在就無法進入到jquery.validationEngine-zh_CN.js這個文件中執行我們內部定義的函數。但是如果把自定義函數放在我們自己的js中,就會先執行我們自己js文件中的函數,最后才判斷是否存在required,而這個時候我們已經push進去了,所以就不會報錯說找不到你自定義函數名了。

(這個是無效且不可執行的,不要用)

這個驗證控件其實挺不錯的,只是這個bug給搞了半天,還好網上有解決辦法,但是貌似沒有一個像我說的這么清楚的,都是點明一下而已。希望能夠幫助到大家,同時自己留存以后用。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 天台县| 苍南县| 泸溪县| 洱源县| 定兴县| 凭祥市| 绥阳县| 岳西县| 星座| 灵山县| 阿巴嘎旗| 舞阳县| 临沧市| 温州市| 陆川县| 宣恩县| 英德市| 金川县| 桂阳县| 文水县| 泽州县| 永寿县| 美姑县| 买车| 龙口市| 灵石县| 获嘉县| 新营市| 兰西县| 永顺县| 荆门市| 辽中县| 唐山市| 凤翔县| 治县。| 舟曲县| 东方市| 阿图什市| 肥城市| 萨迦县| 平阴县|