2015-12-01 6 views
2

Итак ... Я буквально просматривал интернет, ища решение этой проблемы, и не нашел ответа, который прямо (или косвенно) предлагает ответ.Повторяющиеся формы в таблице строк с использованием Angularjs

Я пытаюсь создать несколько форм в таблице с каждой строки заворачивают в <form> теги, как так

<tr ng-repeat="item in items"> 
    <form ng-submit="updateItem(item)"> 
      <td ng-bind="$index + 1"></td> 
      <td ng-bind="item.title"></td> 
      <td><button>Submit</button></td> 
    </form> 
</tr> 

Казалось работать, как предполагалось, пока я не понял, что нг-повтор не был оборачивать <form> тег вокруг <td> тегов, и это закончилось тем, что выглядели как так

<tr ng-repeat="item in items"> 
    ***<form ng-submit="updateItem(item)"></form>*** //The form tags were unwrapped 
      <td ng-bind="$index + 1"></td> 
      <td ng-bind="item.title"></td> 
      <td> 
       ***<button>Submit</button>*** //Buttons don't submit cos no form 
      </td> 
</tr> 

в то время, что я действительно хочу, чтобы достичь что-то вроде

<tr> 
    <form> 
    <td> 
     <button>Hi</button> 
    </td> 
    </form> 
</tr> 
<tr> 
    <form> 
    <td> 
     <button>Hello</button> 
    </td> 
    </form> 
</tr> 

Мне очень понравилась бы помощь в решении этой проблемы.

+0

Я полагаю, причина в том, что вы не можете иметь тег 'form' непосредственно в' tr'. Почему бы не поставить 'форму' в тег' td'? –

+1

Ваше решение находится здесь: http://stackoverflow.com/questions/1249688/html-is-it-possible-to-have-a-form-tag-in-each-table-row-in-a-xhtml- valid-way – pegatron

+1

Интересно, что третий пример, который я показал в своем вопросе, работает достаточно хорошо. Спасибо @TjaartvanderWalt – Cozzbie

ответ

0

Ну, благодаря @pegatron и ссылка Stack Overflow он предоставил используя @tjbp ответ, который я закончил с использованием атрибутов формы входных полей и что сделал это для меня. Несмотря на то, что он не был протестирован во всех браузерах, это делает трюк проверки HTML5. Вот что я закончил.

<tr ng-repeat="item in items"> 
<form ng-submit="updateItem(item)" id="{{item.title}}"> 
     <td ng-bind="$index + 1"></td> 
     <td ng-bind="item.title"></td> 
     <td><button form="{{item.title}}">Submit</button></td> 
</form></tr> 

И при этом форма и связанные с ней входы отправляются с помощью нажатия кнопки. Спасибо.

+0

С недопустимым HTML вы абсолютно уверены, что это будет работать одинаково во всех браузерах? Различные браузеры обрабатывают ошибки по-разному! Поэтому вам нужно будет очень тщательно протестировать, когда будет выпущена новая версия браузера. @ Решение Pegatron и связанные ответы были безошибочным HTML. –

+0

@MrLister Глядя на это [ссылка] (http://caniuse.com/form-attribute), он показывает, что единственным браузером, не поддерживающим его, является IE. И да, я понимаю, что это огромный ... вздох. – Cozzbie

+0

Я не говорю об атрибуте 'form' на'

3

Вы можете объединить ячейки:

<tr ng-repeat="item in items"> 
    <td colspan="3"> 
     <form ng-submit="updateItem(item)"> 
      ... 
     </form> 
    </td> 
</tr> 

Или использовать ngForm директиву вместо form (и добавить подать на ввести вручную):

<tr ng-repeat="item in items" ng-form="myForm"> 
    <td ng-bind="$index + 1"></td> 
    <td ng-bind="item.title"></td> 
    <td><button type="button" ng-click="updateItem(item)">Submit</button></td> 
</tr> 
+0

Второй подход - единственное полное угловое решение и должно быть принятым ответом. Работает во всех браузерах, и вы также можете использовать myForm для проверки строки. –

3

Вы можете добавить новую таблицу в каждой строке, как это ;

<table> 
<tr ng-repeat="item in items"> 
    <td> 
    <form ng-submit="updateItem(item)"> 
    <table> 
     <tr> 
     <td ng-bind="$index + 1"></td> 
     <td ng-bind="item.title"></td> 
     <td><button>Submit</button></td> 
     </tr> 
    </table> 
    </form> 
    </td> 
</tr> 
</table>