【问题标题】:How to call a javascript function once on page load, page reloads, don't call it again如何在页面加载,页面重新加载时调用一次javascript函数,不要再次调用它
【发布时间】:2011-03-28 04:47:01
【问题描述】:

在 Magento 购物车上,需要填写 2 个表格:运费估算和优惠券代码。每次提交表单后都会刷新页面。运费估算表需要在优惠券表格之前提交,以便优惠券可以验证国家/地区。

我想做的是在装载时致电运输表格的coShippingMethodForm.submit()。这样国家就被加载了,然后优惠券表格会检查国家。这还有一个额外的好处,即无需用户提交表单即可显示初始运费。

我的挑战:如果我在加载时调用 coShippingMethodForm.submit() - 它会刷新页面,然后不断刷新 b/c,coShippingMethodForm.submit() 会不断提交和刷新。

我如何调用该函数一次,页面刷新,而不是再次运行(除非用户单击提交按钮)。

Example Magento cart page I'm referring to

【问题讨论】:

  • 听起来像是... AJAX 的工作!
  • 是的,这听起来很令人耳目一新……也许一些 JavaScript 不会有伤害:)

标签: javascript forms magento refresh


【解决方案1】:

您可以使用 cookie 来防止重新加载时重新启动。
用于浏览器 cookie 的函数 js 可以在这里找到http://www.quirksmode.org/js/cookies.html
在你的 JS 函数 coShippingMethodForm.submit

coShippingMethodForm.submit = function(){
     //check cookie here
     if(readCookie('already_submit')==1)
          return;
     createCookie('already_submit', 1, 1); //for 1 day
     //old code here
}

在提交按钮上,添加eraseCookie行:

<input type="submit" id="your_submit_button" 
       onclick="eraseCookie('already_submit');" />

【讨论】:

  • 这里的两个答案可能都有效,但它们让我意识到了一个更好的方法:检查运费 div 是否存在。如果没有,则提交 coShippingMethodForm。这是使用的JS:window.loaded=shippingLoaded(); function shippingLoaded() { if (checkobject("co-shipping-method-form")) { coShippingMethodForm.submit(); } } 函数 checkobject(obj) { if (document.getElementById(obj)) { return false; } 其他 { 返回真; } }
【解决方案2】:

我看到你在使用 PHP,为什么不只是有一个隐藏的表单 &lt;input type='hidden' name='countrySubmitted' value='true' /&gt; 然后在php渲染页面时检查是否设置了值,如果没有则调用函数提交。

echo "<script type='text/javascript'>";
if (isset($_POST['countrySubmitted']))
echo "document.coShippingMethodForm.Submit();";
echo "</script>";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-21
    • 1970-01-01
    • 1970-01-01
    • 2011-09-03
    • 1970-01-01
    • 1970-01-01
    • 2011-04-20
    • 1970-01-01
    相关资源
    最近更新 更多