2013-02-11 87 views
0

我有一個問題得到一個自定義驗證工作與jQuery。使用jQuery的自定義驗證器有一些問題

這是我創建的函數,用於檢查並查看文本框是否包含PO BOX。

function valPoBox(sender, args) { 
    var hasPObox = "^P\.?\s?O\.?\sB[Oo][Xx]."; 
    var StreetAddress = $('.streetaddress').val(); 
    var match = StreetAddress.match(RegExp(hasPObox)); 
    if (!match) { 
     args.IsValid = false; 
     sender.ErrorMessage = "Address must not contain P.O. Box"; 
     $('.valPoBox').attr("ErrorMessage", sender.ErrorMessage); 
    } 
    else { 
     args.IsValid = true; 
    } 
} 

該函數在我將tabbox移出文本框並按照邏輯進入args.IsValid = false時觸發;但它不會顯示錯誤消息。

任何想法我做錯了什麼?

回答

0

您擁有的最後一行$('.valPoBox').attr("ErrorMessage", sender.ErrorMessage);實際上並不是有效的代碼。 attr函數在元素上設置HTML屬性。我猜你想要做的是在輸入後添加一段文字,並在驗證失敗後將其顯示給用戶。

例如,你可以有這樣的事情:

<input class="streetaddress" /><span id="PoBoxError"></span> 

你的JS然後變成類似:

... 
    $('#PoBoxError').html(sender.ErrorMessage); 
} else { 
    args.IsValid = true; 
    $('#PoBoxError').html(''); 
} 

這與您的錯誤信息,並隱藏了輸入後設置跨度它再次通過驗證。這只是其中一種方法,您可以實現這一點,其他方式涉及顯示和隱藏內容,但我試圖儘可能使原始代碼儘可能接近答案。

+0

感謝您的快速響應。我在ASP中使用CustomValidator並嘗試通過上面的jquery設置errormessage。自定義驗證器有一個「valPoBox」類。 – reds184 2013-02-11 16:24:36

+0

自定義驗證器只是被解僱的服務器端,所以您將無法使用jQuery或任何JavaScript在客戶端上設置ErrorMessage屬性。最好的辦法是將它放在一個帶有AutoPostback =「true」屬性的''中,並將JavaScript代碼轉換爲.NET用於輸入框的OnChange事件。此外這個問題應該有ASP.NET標籤,因爲這比ASP.NET更關注ASP.NET而不是jQuery。 :) – Deif 2013-02-11 16:28:22