2012-03-29 15 views
2

送信ボタンを使用してAJAX経由でニュースレター情報を送信するコードを使用していますが、残念ながらユーザーが電子メールアドレスを入力して押し込むと、ページが再ロードされ、Magento AJAX newsletter submitを入力したときに送信

ユーザーが[送信]ボタンをクリックしたときと同じ結果を得るには、Enterキーを押してください。知恵/指導をありがとう!

<div class="block block-subscribe"> 
    <div id="feedback" style="display:none" class="mini-newsletter"> 
    Thank you for subscribing to our newsletter! 
    </div> 

    <form name="newsletter-form" id="newsletter-form" method="post"> 
     <div class="block-content"> 
     <div class="input-box"> 
      <input onkeypress="handleKeyPress(event,this.form)" type="text" placeholder="Email address" name="email" id="newsletter" title="<?php echo $this->__('Subscribe to Our Newsletter') ?>" class="required-entry input-subscribe" style="width:178px;" /> 
      <div class="error-news-msg" id="error-news-msg" style="display:none;">Please enter a valid email address.</div> 
     </div> 
     <div class="actions"> 
      <div class="news-loader" id="news-loader" style="text-align:center; display:none;"> 
       <img src="<?php echo $this->getSkinUrl('images/news-loader.gif'); ?>" /> 
      </div>  
      <button type="button" title="<?php echo $this->__('Subscribe') ?>" onclick="myfunc();" class="button"> 
       <span><span>Subscribe</span></span> 
      </button> 
     </div> 
     </div> 
    </form>  
</div>   

Javascriptを::

<script type="text/javascript">   
    function myfunc() 
     {  
      var newsletterSubscriberFormDetail = new VarienForm('newsletter-form'); 
      var form_email = $('newsletter').getValue(); 
      var params_form = $('newsletter-validate-detail'); 
      //alert(params_form); 
      new Validation('newsletter'); 
      if(echeck(form_email)) 
      { 
      //alert(form_email); 
      //alert(Form.serialize($('newsletter-validate-detail'))); 
      new Ajax.Updater({ success: 'newsletter-form' }, '<?php echo $this->getUrl('newsletter/subscriber/new') ?>', { 
       asynchronous:true, evalScripts:false, 
       parameters: { email: form_email }, 
       onComplete:function(request, json){Element.hide('newsletter-form'); Element.hide('news-loader'); Element.show('feedback');}, 
       onLoading:function(request, json){Element.show('news-loader');}, 

      }); 



      } 
      else 
      { 
      //alert(form_email); 
       return false; 
      } 

     }  



function echeck(str) { 

     var at="@" 
     var dot="." 
     var lat=str.indexOf(at) 
     var lstr=str.length 
     var ldot=str.indexOf(dot) 
     if (str.indexOf(at)==-1){ 
      //alert("Invalid E-mail ID") 
      goProcedural() 
      return false 
     } 

     if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr){ 
      //alert("Invalid E-mail ID") 
      goProcedural() 
      return false 
     } 

     if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr){ 
      //alert("Invalid E-mail ID") 
      goProcedural() 
      return false 
     } 

     if (str.indexOf(at,(lat+1))!=-1){ 
      //alert("Invalid E-mail ID") 
      goProcedural() 
      return false 
     } 

     if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){ 
      //alert("Invalid E-mail ID") 
      goProcedural() 
      return false 
     } 

     if (str.indexOf(dot,(lat+2))==-1){ 
      //alert("Invalid E-mail ID") 
      goProcedural() 
      return false 
     } 

     if (str.indexOf(" ")!=-1){ 
      //alert("Invalid E-mail ID") 
      goProcedural() 
      return false 
     } 

      return true      
    } 

function goProcedural() 
{ 
    Element.show('error-news-msg'); 
    Element.hide.delay(5, 'error-news-msg'); 
} 

</script> 
+0

一般的に言って、コードブロックのための良い方法は、他に、関連するJSを1つのブロックにのみ関連するHTMLを入れてすることです。十分な量を含んでいない場合は、それを拡張するように求められるかもしれませんが、ソース全体に貼り付けることで読みにくくなります。 – ramblinjan

答えて

1

私はこれを動作させました!その後

<form name="newsletter-form" id="newsletter-form" method="post" onsubmit="myfunc(event)"> 

変更:

<form name="newsletter-form" id="newsletter-form" method="post"> 

へ:

は私が変更さ

function myfunc() 

へ:

function myfunc(event) 

が次に変更:

<button type="button" title="<?php echo $this->__('Subscribe') ?>" onclick="myfunc();" class="button"> 

へ:

<button type="button" title="<?php echo $this->__('Subscribe') ?>" onclick="myfunc(event)" class="button"> 

そして右のこの行の前に:

var newsletterSubscriberFormDetail = new VarienForm('newsletter-form'); 

が、私はこの行を追加:

event.preventDefault(); 
0

この1つは、共通の問題であるとInternet Explorerに固有であるように思わ

は、ここに私の現在のコードです。

問題は、ボタンのクリックがフォームを送信するだけでなく、onclickイベントを発生させることです。これらは2つの異なるイベントで、フォームの送信が優先されるようです。これは、フォームを送信クリックイベントを停止します

​​

:あなたはonclickの呼び出しにreturn false;を配置する必要があり、この問題を解決するには

+0

私はChromeを使用しています。 – cfx

+0

私はChromeがこれを行うのを見たことがないと認めなければなりません。変更があったかどうか試しましたか? – CCBlackburn

+0

この変更の影響はありません。 – cfx

0

オープン:アプリ/デザイン/フロントエンド/デフォルト/モダン/テンプレート/ニュースレターter/subscribe.phtml

このファイルのバックアップを1つ作成し、このコードに置き換えてください。詳細については

<div class="awis-news-block"> 
<div class="ajax-newsletter-subscribe-form"> 
<form id="ajax_newsletter_subscribe_form" method="post"> 
<input type="text" name="email" id="newsletter" title="<?php echo $this->__('Sign up for our newsletter') ?>" class="input-text required-entry validate-email"> 
       <button id="ajax-newsletter-submit" class="button" type="submit" title="JOIN">. 
       <span><span>JOIN</span></span> 
       </button> 
<input type="hidden" class="url1" value="<?php echo $this->getFormActionUrl() ?>"> 
       <span class="error" style="display:none"> Please Enter Email Id.</span> 
       <span class="valid" style="display:none"> Please enter a valid email address.To review our privacy policy, please click here.</span> 
       <span class="success" style="display:none">Thank you for joining our email club. Check your email for your 15% off coupon!</span> 
    </form> 
</div> 
</div> 

    <script type="text/javascript"> 
    //<![CDATA[ 
     var newsletterSubscriberFormDetail = new VarienForm('newsletter-validate-detail'); 
    //]]> 
    </script> 

    <script type="text/javascript"> 
    $(function() { 
     $(".button").click(function() {   
     var email = $("#newsletter").val(); 
     var url1 = $(".url1").val(); 
     var dataString = 'email='+ email; 

      if(email=='') 
      { 
       $('.success').fadeOut(200).hide(); 
       $('.valid').fadeOut(200).hide();    

       $('.error').fadeIn(200).fadeOut(8000); 

      } 
      if (email!='') 
      { 

       var a = email; 

       var filter = /^[a-zA-Z0-9_.-][email protected][a-zA-Z0-9]+[a-zA-Z0-9.-]+[a-zA-Z0-9]+.[a-z]{1,4}$/; 
       if(filter.test(a)){ 
        ajaxn(); 
       } 
       else{ 
        $('.error').fadeOut(200).hide(); 
        $('.success').fadeOut(200).hide(); 
        $('.valid').fadeIn(200).fadeOut(8000); 
       } 

      } 
     function ajaxn() 
      { 
       $.ajax({ 
       type: "POST", 
       url: url1, 
       data: dataString, 
       success: function() 
        {     
        $('.error').fadeOut(200).hide(); 
        $('.valid').fadeOut(200).hide(); 
        $('.success').fadeIn(200).fadeOut(8000); 

        } 
       }); 
      } 
     return false; 
     }); 
    }); 

    </script> 

submit magento newsletter using ajax

関連する問題