中文字幕日韩一区二区_国产一区二区av_国产毛片av_久久久久国产一区_色婷婷电影_国产一区二区精品

jQuery Validation插件remote驗(yàn)證方式的Bug

  jQuery插件很多,其中一個(gè)重要的插件便是jQuery Validation,它的作用是對(duì)表單進(jìn)行驗(yàn)證,還上了jQuery官網(wǎng)。不過(guò)奇怪的是,最近用下來(lái)感覺(jué)有些古怪,因?yàn)楹孟裼行┧腊澹延泄δ艿膽?yīng)變能力還不強(qiáng),甚至還有個(gè)奇怪的Bug。任何項(xiàng)目有Bug其實(shí)也正常,但這個(gè)Bug其實(shí)是一個(gè)文檔上已經(jīng)記載了,卻沒(méi)有實(shí)現(xiàn)的功能,這就有些說(shuō)不過(guò)去了。這個(gè)問(wèn)題便出在remote驗(yàn)證方式上,還好修改起來(lái)非常容易,在此記錄一下,也方便以后的參考。

  在表單驗(yàn)證時(shí),有時(shí)候會(huì)需要發(fā)一個(gè)AJAX請(qǐng)求去服務(wù)器上進(jìn)行判斷,例如在用戶(hù)注冊(cè)時(shí)檢查用戶(hù)名是否存在。jQuery Validation插件提供了一種remote方式來(lái)實(shí)現(xiàn)這一點(diǎn)。例如我可以這樣驗(yàn)證表單:

<form id="regForm">    <input type="text" name="userName" />form><script language="Javascript">    $('#regForm').validate({        'rules': {            'userName': {                'required': true,                'remote': '/account/verify'            }});script>

  這樣,jQuery Validation便會(huì)請(qǐng)求“/account/verify?userName=jeffz”這樣的URL來(lái)獲取true/false。可惜的是,我們?cè)谑褂?a href=/itjie/ASPjishu/ target=_blank class=infotextkey>ASP.NET MVC時(shí),往往會(huì)將input的name寫(xiě)為特定的形式,目的是利用DefaultModelBinder的強(qiáng)大綁定功能。例如:

<form id="regForm">    <input type="text" id="userName" name="user.Name" />form>

  與此同時(shí),我們用來(lái)進(jìn)行驗(yàn)證的Action方法,它的參數(shù)名可能也有所不同:

public ActionResult Verify(string name) { ... }

  根據(jù)文檔描述,此時(shí)我們應(yīng)該這樣寫(xiě):

$('#regForm').validate({    'rules': {        'user.Name': {            'remote': {                url: '/account/verify',                data: {                    name: function() { return $("#userName").val(); }                }}}}});

  可是,從實(shí)際效果來(lái)看,jQuery還是在請(qǐng)求“/account/verify?user.Name=jeffz”,百思不得其解。確認(rèn)在三之后只得求助于jquery.validation.js源碼,看后差點(diǎn)暈過(guò)去:

remote: function(value, element, param) {    if ( this.optional(element) )        return "dependency-mismatch";    ...    param = typeof param == "string" && {url:param} || param;     if ( previous.old !== value ) {        previous.old = value;        var validator = this;        this.startRequest(element);        var data = {};         data[element.name] = value; // data還是以element.name為準(zhǔn)?        $.ajax($.extend(true, {            url: param,            mode: "abort",            port: "validate" + element.name,            dataType: "json",            data: data,            success: function(response) {                ...

  我很奇怪,不知道為什么會(huì)這樣做,這樣根本沒(méi)有起到指定參數(shù)名的作用。那么,改吧:

remote: function(value, element, param) {    if (this.optional(element))        return "dependency-mismatch";    ...    param = typeof  param == "string" && {url:param} || param;    if (previous.old !== value) {        previous.old = value;        var validator = this;        this.startRequest(element);        var data = {};        data[element.name] = value;        $.ajax($.extend(true, {            // url: param,            url: param.url,            mode: "abort",            port: "validate" + element.name,            dataType: "json",            // data: data,            data: param.data || data,            success: function(response) {                ...

  修改兩處即可,問(wèn)題就此解決。只可惜,jquery.validate.min.js類(lèi)似的文件只能自己進(jìn)行壓縮了。

  居然會(huì)出現(xiàn)這樣的問(wèn)題,實(shí)在令人費(fèi)解。

it知識(shí)庫(kù)jQuery Validation插件remote驗(yàn)證方式的Bug,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 91视频进入 | 成人福利视频网站 | 免费视频一区二区 | 99国产欧美| 国产精品毛片无码 | 亚洲一区电影 | 亚洲视频在线观看一区二区三区 | 亚洲精品4 | 国产一区二区三区四区三区四 | 国产免费一区 | 亚洲日本视频 | 九九热免费视频在线观看 | 欧美国产亚洲一区二区 | 天天天天操| 欧洲成人免费视频 | 精品中文字幕一区二区三区 | 亚洲国产91 | 81精品国产乱码久久久久久 | 欧美激情一区二区三区 | 国产日韩视频 | 人人插人人 | av毛片免费 | 久久噜噜噜精品国产亚洲综合 | 日本一区二区三区在线观看 | 狠狠亚洲 | 国产精品久久久久久久久久久久冷 | 亚洲欧美网站 | 日韩精品成人在线 | 精品久久久久久亚洲综合网站 | 91精品久久久 | 狠狠干美女 | 亚洲成人黄色 | 国产xxxx搡xxxxx搡麻豆 | 99久久精品免费看国产四区 | 人人干人人看 | 亚洲 中文 欧美 | 中文字幕电影在线观看 | 成人在线观看亚洲 | 人人做人人澡人人爽欧美 | 亚洲成人一区二区在线 | 国产一区二区三区网站 |