2013-07-25 75 views
2

我正在嘗試在ASP.NET WebForms項目中使用KendoUI Validator。 我有一個簡單的頁面,它有很多輸入,當然ASP.NET也添加了一些隱藏的表單元素。如何讓KendoUI驗證程序忽略隱藏的表單元素?

我有以下問題:

  1. 爲什麼KendoUI驗證沒有忽略隱藏表單域,以及如何我得到它?
  2. 爲什麼KendoUI將規則應用到每個輸入字段,以及如何讓它忽略一些字段。我需要一種聲明性的方式來執行此操作,而不是通過在驗證規則中添加各種異常,如KendoUI Validator API頁面中的示例所示。
  3. 不應該是,如果沒有規則設置爲輸入元素中的屬性(例如;必需),那麼不應用驗證?

行爲我越來越:

  • 含)
  • 隱藏的表單元素進行驗證input元素可言,當我打電話.validate(驗證規則仍然可以應用在沒有驗證特定屬性。

我使用以下劍道:

http://cdn.kendostatic.com/2013.2.716/js/jquery.min.js 
http://cdn.kendostatic.com/2013.2.716/js/kendo.all.min.js 
http://cdn.kendostatic.com/2013.2.716/styles/kendo.common.min.css 
http://cdn.kendostatic.com/2013.2.716/styles/kendo.default.min.css 

小提琴,演示了這一點,我已經放在一起: http://jsfiddle.net/codeowl/B5ML4/3/

這裏是代碼,對於那些用不上小提琴:

我有以下標記:

<form action="/" id="testForm"> 
    <input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" /> 
    <input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" /> 

    <input type="text" id="testInput" value=""> 
    <a id="testValidate" href="javascript:;">Validate</a> 
</form> 

和下面的腳本:

var validatable = $("#testForm").kendoValidator({ 
    rules: { 
     testRule1: function (input) { 
      // Only "Tom" will be a valid value for the FirstName input 
      return input.is("[name=firstname]") && input.val() === "Tom"; 
     }, 
     testRule2: function (input) { 
      return $.trim(input.val()) !== ""; 
     } 
    }, 
    messages: { 
     testRule1: "Your name must be Test", 
     testRule2: "Your name must be Foo" 
    } 
}).data("kendoValidator"); 

$("#testValidate").click(function() { 
    if (validatable.validate()) { 
     alert('passed'); 
    } 
}); 

,當我按下驗證鏈接它顯示了隱藏字段驗證消息。

回答

3

對於任何有興趣的人,我最終得到了對這個問題的迴應。我不得不將它發佈在KendoUI高級論壇上,以便讓某人回覆。

下面是響應: How do I get KendoUI Validator to ignore hidden form elements?

事實上,隱藏的輸入元件通過默認驗證 規則邏輯由於這樣的事實,有多個窗口小部件 ,其具有一個隱藏的輸入作爲一部分進行傳遞有標記。但是,由於內置規則會繼承存在某些屬性的內容,因此如果缺少 ,則隱藏的輸入上不會進行驗證。因此,您自己的自定義規則應該處理這種情況,並跳過 適當的元素。例如:

testRule2: function (input) { 
    if (!input.is(":hidden")) { 
     return $.trim(input.val()) !== ""; 
    } 
    return true; 
} 
+0

工作的呢?似乎該規則只到其他輸入,除了只是那些這些設置.... – Maxrunner

+0

我結束了通過添加一個屬性我想使用的自定義規則的元素,並賦予它的規則名稱的值,然後在該規則檢查實施解決方案爲那個價值。例如: 例如; user2109254

+1

您應該提供答案的相關部分以及鏈接。 – Pluc

2

我是新來寫這個。如果你對這些信息和輸入標籤所需的validationMessage財產跨度

只要讓隱藏的輸入禁用

$('#hidden_input').prop('disabled', true) // won't check in kendo or standard jquery validation 

$('#hidden_input').prop('disabled', false) // will check in kendo or standard jquery validation