2017-06-09 19 views
0

フォームに基づいて入力ボタンを含むランディングページを開発しています。ユーザーはフォームに電子メールを追加し、入力によってカタログをダウンロードします。私はフォームフィールドを検証するために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!'); 
      } 
      } 
     }); 
     }); 
    } 
    }) 
}); 
+0

クリックは最初のフォームに送信されます...送信され、2番目に表示されます – tech2017

+3

誤った時点でクリックイベントが追加されています。 – Moose

+0

Yea Mooseが正しいです。フォームの送信時にクリックイベントを追加しないでください。その前にイベントを添付してください。これは、クリックイベントをアタッチしてから初めて新しいクリックイベントがアタッチされ、アタッチされた最初のアタックイベントが発生するため、2回目の動作のみになります。それ以降のクリックで、新しいイベントが追加され、amountOfClicks - 1のカタログがダウンロードされます。 – AtheistP3ace

答えて

0

ここでの問題は、あなたが後にリスナーを結合していることです送信コールバックを送信すると、2回目のクリック時にのみ利用可能になります。

は、私は自分自身[ '提出' =タイプ]それは違っ

<script> 
    function lightBox() { 
     $.fancybox.open({ 
      src: '#hidden-content', 
      type: 'inline', 
      opts: { 
       afterShow: function (instance, current) { 
        console.info('done!'); 
       } 
      } 
     }); 
    } 

    $(document).ready(function() { 
     $('#formmail').validate({ 
      submitHandler: function (form) { 
       lightBox(); 
      } 
     }) 
    }); 
</script> 
+0

ありがとう!それは完璧に働いています。 – AciMatta

+0

@AciMatta確かに、ようこそ! –

0

試してみてください。

$(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!'); 
       } 
      } 
     }); 

     }); 
     $("#test").trigger("click"); 
    } 
    }) 
}); 
+2

なぜこれを試してみませんか?あなたは何を変えましたか?何が間違っていたの?この修正/変更は何ですか? –

0

submitHandlerは、入力のonclickイベントを処理するだろう。

$(document).ready(function() { 
      $('#formmail').validate({ 
       submitHandler: function(form) { 
       //comment below line 
       //$("#test").on('click', function() { 
        $.fancybox.open({ 
         src : '#hidden-content', 
         type : 'inline', 
         opts : { 
         afterShow : function(instance, current) { 
         console.info('done!'); 
         } 
        } 
       }); 

       //}); 
      } 
      }) 
     }); 
関連する問題