#javascript #html #ajax #forms
#javascript #HTML #ajax #формы
Вопрос:
У меня есть кнопка, которая запускает модальный:
<button type="button" class="btn btn-primary add-subscription" data-toggle="modal" data-workspace_id="{{ workspace.id }}" data-target="#addSubscription">Add</button>
Мне нужно значение идентификатора.
В модальном у меня есть форма со скрытым полем workspaceId, куда мне нужно передать значение, определенное в кнопке, которая запускает этот модальный.
<div id="addSubscription" class="modal fade" tabindex="-1" role="dialog" aria-hidden="true">
<form class="form" id="subscription-form" action="{{ path('my_route') }}" method="post" enctype="multipart/form-data">
<input type="hidden" name="workspaceId" value="">
<input id="form-submit" type="submit" class="btn btn-primary" value="Save">
</form>
</div>
Когда я ввожу
value="15"
моя форма работает так, как должна.
Я новичок в функциях javascript, поэтому я понятия не имею, как передать data-workspace_id через мой метод.
И это метод:
$().click(function (e) {
e.preventDefault();
$('#addSubscription').modal();
});
$('#form-submit').on('click', function (e) {
e.preventDefault();
$.ajax({
type: "POST",
url: '/subscription/add',
data: $('form#subscription-form').serialize(),
processData: false,
success: function () {
console.log('Yezzz!');
},
error: function () {
console.log(this.data);
}
});
return false;
});
Примечание: Это работа над моим проектом Symfony с представлением twig.
Комментарии:
1. Не могли бы вы добавить JS, где вы открываете модальный. Потому что это та часть, где вам нужно выбрать атрибут данных и задать значение.
2. Извините. Я отредактировал сообщение. @EmielZuurbier
Ответ №1:
Всякий раз, когда ваш модальный становится открытым, вы можете написать событие, т.е.: show.bs.modal
затем, используя это событие, получите кнопку, которая вызвала модальное использование, т.е. $(event.target).attr('data-workspace_id')
Демонстрационный код :
//will get call when modal will be open
$(document).on('show.bs.modal', '#addSubscription', function (e) {
//put the value of attr inside input box
$("input[name=workspaceId]").val($(event.target).attr('data-workspace_id'))
console.log($(event.target).attr('data-workspace_id'))
});
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
<button type="button" class="btn btn-primary add-subscription" data-toggle="modal" data-workspace_id="12" data-target="#addSubscription">Add</button>
<div id="addSubscription" class="modal fade" tabindex="-1" role="dialog" aria-hidden="true">
<form class="form" id="subscription-form" action="{{ path('my_route') }}" method="post" enctype="multipart/form-data">
<input type="text" name="workspaceId" value="">
<input id="form-submit" type="submit" class="btn btn-primary" value="Save">
</form>
</div>
Другим способом, используя button, вы можете получить значение data-workspace_id
, подобное этому $(this).attr('data-workspace_id')
.
Демонстрационный код :
//on click of button
$(".add-subscription").click(function(e) {
e.preventDefault();
//put value in input box using this .
$("input[name=workspaceId]").val($(this).attr('data-workspace_id'))
$('#addSubscription').modal();
});
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
<button type="button" class="btn btn-primary add-subscription" data-toggle="modal" data-workspace_id="12" data-target="#addSubscription">Add</button>
<div id="addSubscription" class="modal fade" tabindex="-1" role="dialog" aria-hidden="true">
<form class="form" id="subscription-form" action="{{ path('my_route') }}" method="post" enctype="multipart/form-data">
<input type="text" name="workspaceId" value="">
<input id="form-submit" type="submit" class="btn btn-primary" value="Save">
</form>
</div>