атрибут formaction и jQuery

Среди классических моделей «Gang of Four» довольно много специфических для языка. Другие, такие как Visitor, действительно полезны только в объектно-ориентированной настройке. Функциональный язык вместо [Visitor] имеет fold (катаморфизм), и любой, кто пытается использовать Visitor на функциональном языке, будет рассматриваться как опасный сумасшедший. Наконец, существуют шаблоны, которые могут быть применены на любом языке, например Factory.

. Одна из причин, по которым я не являюсь большим поклонником движения шаблонов, как практикуется Гамма и др., Состоит в том, что представление о шаблоне не хватает интеллектуальной согласованности. «Любое полезное» является хорошим заявлением, но, как вы заметили, не дает большого указания относительно того, какие шаблоны могли бы по-прежнему быть полезными при изменении языка или парадигмы.

Для иллюстрации рисков, присущих классифицированию паттернов, проверьте одну из моих любимых коллекций: «Эффективные образцы практики» [k0] Smalltalk Kent Beck . Несмотря на работу «Smalltalk» в названии, многие программисты нашли эти шаблоны применимыми к таким языкам, как Java и Python.

0
задан Mark 19 March 2019 в 07:18
поделиться

2 ответа

Проблема в том, что вы слушаете отправку формы - поэтому $(this) в вашем коде делает form элементом <form>. Вместо этого вы можете прослушать нажатие кнопки «Отправить»:

$("[type='submit']").on("click", function() {
    var url = $(this).attr("formaction");
    console.log(url);
});
0
ответ дан Jack Bashford 19 March 2019 в 07:18
поделиться

Как уже указывалось, $(this).attr('action') всегда относится к атрибуту action самой формы, поскольку это элемент, для которого определено ваше событие.

Что вы можете сделать сами, так это проверить formaction из document.activeElement , что дает вам элемент, который в данный момент сфокусирован. Если он не определен, вы возвращаетесь к самому действию формы.

Демо:

$('#myForm').on('submit', function (e) {
  e.preventDefault();
  var url = $(document.activeElement).attr('formaction') || $(this).attr('action');

  console.log(url);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form action="Action1" method="POST" id="myForm">
  <input type="text" name="field1">
  <input type="text" name="field2">
  <button type="submit">Search</button>
  <button type="submit" formaction="Action2">Save search defaults</button>
</form>

0
ответ дан Jeto 19 March 2019 в 07:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: