フォームに基づいて入力ボタンを含むランディングページを開発しています。ユーザーはフォームに電子メールを追加し、入力によってカタログをダウンロードします。私はフォームフィールドを検証するためにjQuery Validateを使用しています。ユーザーが有効な電子メールを送信すると、PDFのダウンロードが開始され、ライトボックスにメッセージが表示されます。私の問題は、ライトボックスは2回目のクリック後にのみ表示されることです。 JSjQueryのクリック機能は、最初のクリック後にのみ機能します。
<form id="formmail" action="sendmail.php" method="POST">
<fieldset class="input">
<label for="i-email">E-mail:</label>
<input type="email" name="email" id="email" autocomplete="off" required>
</fieldset>
<fieldset class="checkbox">
<input type="checkbox" name="news" id="news">
<label for="i-news">Checkbox email</label>
</fieldset>
<fieldset class="btn">
<div id="test" href="javascript:;">
<input type="submit" value="Download PDF"></input>
</div>
<div style="display: none;" id="hidden-content">
<p>Thank you</p>
</div>
</fieldset>
</form>
そしてここにある:ここで
は、フォームのHTMLで$(document).ready(function() {
$('#formmail').validate({
submitHandler: function(form) {
$("#test").on('click', function() {
$.fancybox.open({
src: '#hidden-content',
type: 'inline',
opts: {
afterShow: function(instance, current) {
console.info('done!');
}
}
});
});
}
})
});
クリックは最初のフォームに送信されます...送信され、2番目に表示されます – tech2017
誤った時点でクリックイベントが追加されています。 – Moose
Yea Mooseが正しいです。フォームの送信時にクリックイベントを追加しないでください。その前にイベントを添付してください。これは、クリックイベントをアタッチしてから初めて新しいクリックイベントがアタッチされ、アタッチされた最初のアタックイベントが発生するため、2回目の動作のみになります。それ以降のクリックで、新しいイベントが追加され、amountOfClicks - 1のカタログがダウンロードされます。 – AtheistP3ace