最近在用formValidator插件,遇到一個問題。當我想用ajaxValidator的url傳參數時,$("#tbName").val()、document.getElementById("tbName").value$("#tbName").attr("value")都不行,后來終於找到原因了,其實是$(document).ready(function () {的原因,所以總是取到name=“”值,那怎么辦呢?
查找了很多資料,發現原來formValidator本事已經對url做處理了,默認把tbName這個ID作為參數名,
只要在checkuser.ashx調用context.Request.Params["tbName"].ToString().Trim()取值就行,已經驗證過,此方法一定有效,示例代碼如下:
JavaScript:
$(document).ready(function () { $.formValidator.initConfig({ formID: "form1", theme: "baidu", debug: false, submitOnce: true, onError: function (msg, obj, errorlist) { $.map(errorlist, function (msg) { }); alert(msg); }, ajaxPrompt: '有數據正在異步驗證,請稍等...' }); $("#tbName").formValidator({ onShow: "請輸入用戶名", onFocus: "用戶名至少5個字符,最多10個字符", onCorrect: "該用戶名可以注冊" }).inputValidator({ min: 5, max: 10, onError: "你輸入的用戶名非法,請確認" })//.regexValidator({regExp:"username",dataType:"enum",onError:"用戶名格式不正確"}) .ajaxValidator({ dataType: "json", async: true, url: "action/checkuser.ashx?command=check&key=" + $("#tbName").attr("value"), success: function (data) { if (data=="1") return true; if (data=="0") return false; return false; }, buttons: $("#button"), error: function (jqXHR, textStatus, errorThrown) { alert("服務器沒有返回數據,可能服務器忙,請重試" + errorThrown); }, onError: "該用戶名已注冊,請更換用戶名", onWait: "正在對用戶名進行合法性校驗,請稍候..." }).defaultPassed(); });
checkuser.ashx:
public void ProcessRequest (HttpContext context) { switch (context.Request.Params["command"].ToString()) { case "check": CheckUser(context); break; } } public void CheckUser(HttpContext context) { string res = "1"; StringBuilder strBul = new StringBuilder(); string name = context.Request.Params["tbName"].ToString().Trim(); //注:context.Request.Params["key"].ToString()為“”,此傳值無效。 if(name.Equals("12345a")){res="0";} strBul.Append(res); context.Response.Write(strBul); }
注意:此方法只能在this.ID即本控件(這里是$("#tbName")),才能在ashx里動態取值。