Форма HTML: проверка и предотвращение обновления страницы sh при отправке - PullRequest
0 голосов
/ 29 мая 2020

У меня есть форма HTML с кнопкой отправки, и я хотел бы предотвратить обновление страницы sh после нажатия «Отправить» (у меня также есть несколько вызовов AJAX в обработчике кликов):

var rating_form = d3.select("body")
		.append('form')
		.attr('class', 'rating');

 // Appending up and down vote radio button
	var radio_groups = rating_form.append('div').attr('class', 'form-group');

	// Radio for up
	var radio_grp_chk = radio_groups
		.append('div')
		.attr('class', 'form-check form-check-inline upvote');
	radio_grp_chk
		.append('input')
		.attr('class', 'form-check-input')
		.attr('type', 'radio')
		.attr('name', 'voting-radio')
		.attr('value', 'thumbup')
		.attr("required", "");
	radio_grp_chk.append('span').text("upvote");


	// Radio for down
	var radio_grp_chk2 = radio_groups
		.append('div')
		.attr('class', 'form-check form-check-inline downvote');
	radio_grp_chk2
		.append('input')
		.attr('class', 'form-check-input')
		.attr('type', 'radio')
		.attr('name', 'voting-radio')
		.attr('value', 'thumbdown')
		.attr("required", "");
	radio_grp_chk2.append('span').text("downvote");

	// Appending text area
	rating_form
		.append('div')
		.attr('class', 'form-group')
		.append('textarea')
		.attr('class', 'form-control feedback-text')
		.attr('placeholder', 'Enter your text...');

	// Submit button
	rating_form
		.append('button')
		.attr('type', 'submit')
		.attr('class', 'btn btn-primary rating-btn')
		.text('Submit!');
    
  // Bind click event
  rating_form.select('.rating-btn').on('click', function () {
		d3.event.preventDefault();
		
		var current_text = $("form").find("textarea").val();
		var current_vote = $("form").find('input[name=voting-radio]:checked').val()

		console.log(
			'My text is: ' +
				current_text +
				" and the vote is: " +
				current_vote
		);

		// Some further AJAX calls here
	});
<!DOCTYPE html>
<head>
    <!-- bootstrap -->
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css"
        crossorigin="anonymous">
</head>

<body>
    <script src="https://d3js.org/d3.v5.min.js"></script>
    <!-- jQuery -->
    <script src="https://code.jquery.com/jquery-3.5.0.min.js" crossorigin="anonymous"></script>
</body>

Чтобы предотвратить автоматическое обновление sh при отправке, я использую d3.event.preventDefault(); в прослушивателе кликов.

Однако это приводит к тому, что форма не проверяется (мои переключатели имеют атрибут required) => нажатие кнопки «Отправить» без выбора переключателя не приведет к появлению ошибок. Итак, как мне решить эту проблему?

1 Ответ

0 голосов
/ 29 мая 2020

Не знаю, откуда взялся этот d3 объект, но ваш submit обработчик, вероятно, должен принять параметр события:

  rating_form.select('.rating-btn').on('click', function (e) {
        e.preventDefault();
        ...

Подробнее см. https://api.jquery.com/event.preventDefault/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...