2014-12-05 27 views
2

我有一個可選的禁用輸入。當禁用時,它似乎仍然參與表單驗證。我怎樣才能從表單驗證中刪除這個輸入?在example如何從表單驗證中刪除或禁用輸入

<form ng-app name="myForm"> 
    <label>Name</label> 
    <input type="text" name="name" ng-model="form.name" ng-disabled="show" required> 
    <input type="submit" ng-disabled="myForm.name.$invalid"> 
    <input type="submit" ng-click="show = !show" value="Toggle"> 
</form> 

注意,當你點擊切換輸入被禁止,但提交按鈕不被啓用。

+0

這是原因之一,我不喜歡在角的形式驗證方法(雖然沒有具體到角,它是鼓勵),在比較複雜的情況你要與邏輯出血落得到標記。我會考慮將所有的驗證邏輯移入模型中,然後移出UI。 https://github.com/nadavsinai/ndValidation/是一個您可以使用的指令,我也列出了我在此處的首選方式:https://northerncodemonkey.wordpress.com/2014/11/26/angular -model-validation-my-solution-so-far /雖然還沒有成功將其應用於GIT。 – DoctorMick 2014-12-05 09:07:07

回答

1

可以使用NG-需要在這種情況下:

<form ng-app name="myForm"> 
    <label>Name</label> 
    <input type="text" name="name" ng-model="form.name" ng-disabled="show" ng-required="!show"> 
    <input type="submit" ng-disabled="myForm.name.$invalid"> 
    <input type="submit" ng-click="show = !show" value="Toggle"> 
</form> 
+0

這適用於演示,但是,當我有一個自定義指令應用不工作..我怎樣才能使這個工作與自定義指令? – Chris 2014-12-05 09:11:09

+0

@Chris它取決於你的指令是如何寫的,爲了獲得這個功能,你的指令也應該支持被禁用。總是有效的全球方式我不直接瞭解。當然,應該有可能編寫一個指令,當它爲真時,它總是在字段上觸發一個有效的指令。 – 2014-12-05 09:47:23

+0

我最終在指令中根據您的原始答案選擇是否需要,謝謝。 'if(ele.attr(「required」)==「required」){}' – Chris 2014-12-05 09:56:58

0

你可以用純JavaScript做。通過搜索您創建的屬性。

function validateForm() { 
    var inputElements = document.forms["myForm"].getElementsByTagName("input"); 
    for(inpt_ele=0; inpt_ele<inputElements.length; inpt_ele++) { 
     if(inputElements[inpt_ele].getAttribute("disabled") == "disabled") { 
      //skip 
     } 
     else { 
      //validate 
     } 
    } 
} 
validateForm();