2017-04-21 16 views
0

只要用戶在文本框中輸入一些charector,就需要清除文本框的驗證消息。我需要爲用戶選擇下拉valuie錯誤消息應該清楚只要用戶輸入值,只爲控件清除驗證消息

使用jQuery

$('#ProjectContent').keypress(function() { 
     resetValidation(); 

    }); 



    function resetValidation() { 



    } 

文本

<div class="form-group"> 
        @Html.LabelFor(model => model.ProjectContent, htmlAttributes: new { @class = "control-label col-md-4" }) 
        <div class="col-md-8"> 
         @Html.TextAreaFor(model => model.ProjectContent, new { htmlAttributes = new { @class = "form-control", cols = "50" } }) 
         @Html.ValidationMessageFor(model => model.ProjectContent, "", new { @class = "text-danger" }) 
        </div> 
       </div> 

怎樣纔可以處理做同樣的組合框,一旦Combobox

<div class="form-group"> 
       @Html.LabelFor(model => model.Company, htmlAttributes: new { @class = "control-label col-md-4" }) 
       <div class="col-md-8"> 
        <div class="editor-field"> 
         @(Html.Kendo().ComboBoxFor(model => model.CountryCode) 
         .HtmlAttributes(new { style = "width:100%" }) 
         .DataTextField("CompanyCodeCompany") 
         .DataValueField("CountryCode") 
         .Filter("contains") 
         .MinLength(3) 
         .Events(e => e.DataBound("onCompanyComboChange")) 
         .Value(@user.DefaultCountryCode) 
         .DataSource(dataSource => dataSource 
         .Read(read => read.Action("RequestHeader_SalesOrganisation", "Request").Type(HttpVerbs.Post)) 
         .ServerFiltering(true) 
         ) 
         ) 
        </div> 
        @Html.ValidationMessageFor(model => model.Company, "", new { @class = "text-danger" }) 
       </div> 
      </div> 
+0

要「清除」驗證消息是什麼:只是隱藏或從視圖中完全刪除嗎?最簡單的方法是使用jQuery隱藏該消息:'$('。text-danger')。hide();'或$('。field-validation-error')。hide();'。如果要使用CSS類清除消息,請使用'$('。text-danger')。removeClass('。text-danger')'或$('。field-validation-error')。removeClass('field -validation-error');' –

+0

這將清除屏幕上的所有內容。只要用戶輸入有效值,就需要對特定控件執行此操作 – Tom

+0

您可以將'@ Html.ValidationMessageFor'封裝在帶'id'屬性的'div'中,然後在用戶輸入後使用它來隱藏消息。 。'$( 「#validationmessagediv」)隱藏();'。那麼,什麼意思是「清除屏幕上的所有內容」? –

回答

0

假設你有一個TextAreaFor和Kendo ComboBoxForValidationMessageFor包裹在裏面的HTML div元素,比如這個例子:

<div class="col-md-8"> 
    @Html.TextAreaFor(model => model.ProjectContent, new { htmlAttributes = new { @class = "form-control", cols = "50" }}) 
    <div id="message1"> 
     @Html.ValidationMessageFor(model => model.ProjectContent, "", new { @class = "text-danger" }) 
    </div> 
</div> 

<!-- other stuff --> 

<div class="editor-field"> 
    @(Html.Kendo().ComboBoxFor(model => model.CountryCode) 
    .Name("CountryCode") 
    .HtmlAttributes(new { style = "width:100%" }) 
    .DataTextField("CompanyCodeCompany") 
    .DataValueField("CountryCode") 
    .Filter("contains") 
    .MinLength(3) 
    .Events(e => e.DataBound("onCompanyComboChange")) 
    .Value(@user.DefaultCountryCode) 
    .DataSource(dataSource => dataSource 
    .Read(read => read.Action("RequestHeader_SalesOrganisation", "Request").Type(HttpVerbs.Post)) 
    .ServerFiltering(true) 
    )) 
</div> 
<div id="message2"> 
    @Html.ValidationMessageFor(model => model.Company, "", new { @class = "text-danger" }) 
</div> 

要隱藏對應ComboBoxFor驗證消息單獨,您可以使用divid名字來隱藏它做keypress時:

$(document).ready(function() { 
    $('#CountryCode').data('kendoComboBox').input.keypress(function() { 
     resetComboValidation(); 
    }); 

    function resetComboValidation() { 
     $("#message2").hide(); 
    } 
}); 

此外,您可以隱藏多個包含在div元素中的驗證消息,這些消息使用jQ的id屬性值以message(或您爲其分配的任何名稱)開頭uery attributeStartsWith selector如下所示:

$(document).ready(function() { 
    // TextAreaFor 
    $('#ProjectContent').keypress(function() { 
     resetValidation(); 
    }); 

    // ComboBoxFor 
    $('#CountryCode').data('kendoComboBox').input.keypress(function() { 
     resetValidation(); 
    }); 

    // hide validation messages 
    function resetValidation() { 
     $('div[id^="message"]').hide(); 
    } 
}); 

NB:attributeStartsWith選擇也適用於使用相同名稱的所有div元件,即<div id="message">@Html.ValidationMessageFor(...)</div>包裹所有ValidationMessageFor應該工作。此外,通過ComboBoxFor使用keypress事件可以由含有keypress這樣bind取代:

$('#CountryCode').data('kendoComboBox').input.bind({ 
    keypress: function() { 
     resetValidation(); 
    } 
}); 

參考:

kendo.ui.ComboBox JavaScript API (jQuery)

0

我認爲你必須在你的文本區域指定名稱/ ID HTML屬性/ combobox來執行按鍵事件。

@Html.TextAreaFor(model => model.ProjectContent, new { htmlAttributes = new { @name="ProjectContent",@class = "form-control", cols = "50" }}) 

如果仍然無法正常工作內聯寫事件如下

@Html.TextAreaFor(model => model.ProjectContent, new { htmlAttributes = new { @name="ProjectContent",@class = "form-control", cols = "50" , keypress="yourMethod()"}})