【发布时间】:2012-04-13 14:01:36
【问题描述】:
我正在使用代码通过提交按钮通过 AJAX 提交时事通讯信息,但不幸的是,当用户填写他们的电子邮件地址并按下进入页面时,页面只会重新加载并且没有数据保存。
我希望用户按回车键获得与用户单击提交按钮相同的结果。感谢您的任何智慧/指导!
这是我当前的代码:
<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>
【问题讨论】:
-
一般来说,代码块的良好做法是只将相关的 HTML 放在一个块中,然后将相关的 JS 放在另一个块中。如果您包含的内容不够多,可能会要求您扩展它,但粘贴整个源代码会降低其可读性。
标签: ajax magento newsletter