6

我有一個包含jQuery UI選項卡的頁面,第一個選項卡上有一個必填字段。如果用戶未輸入值,驗證將生效,並且驗證消息將顯示在該字段旁邊。但是,如果用戶不在第一個選項卡上,則該字段無效並不明顯。在ASP.NET MVC 3中使用不引人注目的驗證,當表單無效時如何執行操作?

在這種情況下,我想顯示第一個選項卡,但我不知道如何去註冊一個回調爲「無效」事件,如果有一個。

我也曾考慮顯示的標籤,這將是可見的,而不管用戶是在標籤的上面驗證總結,但我更傾向於將採取用戶到外地。

我已經試過翻翻jquery.validate.unobtrusive.js文件,它似乎延長jquery.validate.js。看着爲jquery.validate的文檔,我看到有一個可以傳遞給validate methodinvalidHandler選擇,但我不知道如何使用這個,因爲該方法被稱爲jquery.validation.unobtrusive。

我感覺這裏有點失落,所以任何幫助,將不勝感激!

編輯

我從來沒有想出答案,但沒有拿出一個解決辦法,這是我貼在下面。不過,我希望有人以更好的方式回答這個問題。

回答

1

我結束了驗證和手動提交表單:

$("#save-button").button().click(function() { 
    if (!$("#profile-form").valid()) { 
     if ($("#tabs").tabs("option", "selected") > 0) { 
      $("#tabs").tabs("option", "selected", 0); 
     } 
     return false; 
    } 
    $("#profile-form").submit(); 
}); 
0

可能要search的errorPlacement()函數

+0

謝謝回答,但不只是爲了指定錯誤消息的位置?這不是我遇到的問題。 –

1

嘗試添加新的適配器顯得突兀。因爲我用的Telerik的,而不是JQuery用戶界面來創建標籤

我的標記看起來不一樣。下面是我的標記看起來像經過驗證後(即通過不顯眼的腳本插入驗證錯誤)

<div id="rItemTabs"> 

    <ul> 
     <li><a href="#rItemTabs-1">Tab 1</a></li> 
     <li><a href="#rItemTabs-2">Tab 2</a></li> 
    </ul> 
    <!-- End Tab Nav--> 

    <!-- Begin Tab Contents --> 
    <div id="rItemTabs-1"> 
     <div class="editor-label"> 
      <label for="Title">Title</label> 
     </div> 
     <div class="editor-field"> 
      <input id="Title" class="input-validation-error name="Title"> 
      <span class="field-validation-error">*</span> 
     </div> 
    </div> 

    <div id="rItemTabs-2"> 
     <div class="editor-label"> 
      <label for="Title">Title</label> 
     </div> 
     <div class="editor-field"> 
      <input id="Title" class="input-validation-error name="Title"> 
      <span class="field-validation-error">*</span> 
     </div> 
    </div> 

</div> 

這個腳本的目標是要經過「標籤內容」的每個格,查找「字段驗證錯誤「類(只有存在錯誤時才應該存在),並且如果找到此類,則更改關聯的Tab Nav項目的顏色(即標籤內容的id與tab的href相同導航項目)。

$.validator.unobtrusive.adapters.add(
    'tab-validation', 
    function() { 
     var tabs = $('#rItemTabs [id*=rItemTabs]'); 
     $(tabs).each(function() { 
     if ($(this).has('.field-validation-error').length) { 
      var tabId = '#' + $(this).attr('id'); 
      $('a[href=' + tabId + ']').css({ 'color': 'red', 'font-weight': 'bolder' }); 
     } 
    }); 
} (jQuery)); 

我希望這是有道理的,以及爲你工作。

2

此代碼here會做你想做的拍攝:

<script type="text/javascript"> 
    $(document).ready(function() { 
     $("#myForm").submit(function() { 
      $("#tabs").tabs("select", $("#myForm .input-validation-error").closest(".ui-tabs-panel").get(0).id); 
     }); 
    }); 
</script> 

它會帶你到有錯誤的第一個標籤。它是在一個項目中,我開發工作的偉大...

+1

awsm完美工作..只是選擇可能現在已經過時,我用$('#tabs')。tabs('option','active',i);代替 –

0

這裏是爲我工作的解決方案:

<button type="submit" onclick="ValidateRequired();">Save</button> 

function ValidateRequired(){ 
    $(':input[required]', '#myForm').each(function(){ 
     if ($(this).val() == ''){ 
      var errorTab = $(this).closest('div').attr('id'); 
      $('#tabs').tabs('select', '#'+errorTab); 
     } 
    }); 
}  
相關問題