2015-09-24 5 views
1

У меня есть два набора данных: «тепло» и «холод», которые извлекаются из другого поставщика. Эти данные довольно неорганизованны, и я удалил много всего в коде, чтобы показать основную часть моей проблемы. «Тепло» и «холод» содержат свойства, которые пользователь должен заполнить. Однако это свойство является динамическим, и количество свойств не фиксировано (следовательно, оно находится в цикле, как показано в коде).Не отправляйте форму, если входные данные пустые

Моя цель - скрыть/отключить кнопку отправки, которая находится на всем пути вниз, когда одно одно поле ввода в списке в обоих наборах данных пуст. Это также должно быть предпочтительно работать в Internet Explorer 9, где не требуется тег 'required'.

Я попытался:

  • Добавление требуемого тега. К сожалению, это не работает в IE9, и у меня есть некоторые проблемы даже в Google Chrome, потому что он по-прежнему отправляет мою форму. (Я также добавил теги формы)

  • Добавить Ng-show в форме отправки. Я проверил, является ли userInput пустым, но это все еще не работает.

  • Теперь вы можете спросить, почему бы мне просто не проверить мой контроллер, являются ли эти свойства пустыми в моем методе отправки? Хотя это хороший момент, я не могу получить доступ к этим динамическим данным очень легко в моем контроллере. Следовательно, мне нужно решение, которое, надеюсь, устранит эту проблему без каких-либо усилий в контроллере.

Код:

<!--Start wrapper!--> 
<div class="wrapper"> 
    <div ng-repeat="(code, program) in data.old.heat"> 
    <div class="row" ng-repeat="(componentId, component) in program"> 
     <div class="inputForm"> 
     <!--This field may not be left empty!--> 
     <input type="text" class="form" ng-model="component.userInput"> 
     </div> 
    </div> 
    </div> 

    <div ng-repeat="(code, program) in data.old.cold"> 
    <div class="row" ng-repeat="(componentId, component) in program"> 
     <div class="inputForm"> 
     <!--This field may not be left empty!--> 
     <input type="text" class="form" ng-model="component.userInput"> 
     </div> 
    </div> 
    </div> 
</div> 
<!--End of wrapper !--> 

<div class="submitPanel"> 
    <button ng-click="submit()">Submit</button> 
</div> 
+0

Вы можете добавить скрытое поле вне этих форм, с небольшим количеством кода, который заполнит его «Да, они сделали что-то ", из любой формы. Просто проверьте состояние этого. – durbnpoisn

ответ

3

У меня есть два варианта для вас, но оба они включают ng-disabled (https://docs.angularjs.org/api/ng/directive/ngDisabled).

Вы можете поместить этот атрибут на кнопку, и вы можете вызвать функцию в области действия в этом атрибуте и проверить, указаны ли все значения.

So like: ng-disabled="checkInputs()".

Или

Вы обернуть форму вокруг всех входов, дайте форме имя как name=form и установить атрибут required на всех входах. (EDIT:. Вы можете использовать ng-required="true" для IE9)

Тогда можно сказать, что ng-disabled="!form.$valid".

+0

Спасибо! Попробуй это тоже! Вернется как можно скорее! – user3125591

+0

Моя единственная проблема заключается в том, что я не могу использовать эти проблемы при проверке, если значения заданы, так как я не могу легко получить эти значения с моего контроллера в методе '' checkInputs() '' – user3125591

+0

А как насчет второго подхода? – Pepijn

4

Здесь я пойти: https://jsfiddle.net/DIRTY_SMITH/zxbe5rt0/

function validate(){ 
var text1 = document.getElementById('text').value; 

if (text1.length > 0){ 
    alert("went through"); 
    return true; 
} 
alert("did not go through"); 
return false; 
} 
+1

Интересное спасибо! Попробуем это как можно скорее и вернемся к этому. – user3125591

+0

На самом деле это не очень чистый угловой подход. – Pepijn

+0

@Pepijn и почему именно он должен быть угловатым? –

4

не специфичны для углового, но вы можете проверить, если он имеет символы с помощью jQuery.

Html

<div class="submitPanel"> 
    <button class="submit-btn" ng-click="submit()">Submit</button> 
</div> 

JQuery

$('#form input').blur(function() 
{ 
    if($(this).val().length === 0) { 
     $(this).parents('.submit-btn').addClass('hide'); 
    } 
}); 

CSS

.hide{ 
display:none; 
} 
+0

Спасибо! Попробуй это рано утром и вернись! Но я предполагаю, что мне все равно нужно обернуть мой код тегами формы? (так как вы говорите #form) – user3125591

+0

Проверьте комментарии по другому вопросу, голосуя против такого подхода! – Pepijn

+0

Я просто использовал его, потому что у меня есть аналогичный проект, в котором нужно то же самое. Однако семантически корректно обернуть форму в тег '

'. Вы можете просто указать ввод, который хотите скрыть класс или id, и сказать '$ ('# idname'). Blur (function() {' или '$ ('. Classname'). Blur (function() {' –

Смежные вопросы