【问题标题】:How to execute jQuery after page refresh页面刷新后如何执行jQuery
【发布时间】:2015-08-15 00:07:41
【问题描述】:

我正在使用 WordPress 和 Woocommerce,目前我的标题中有一个迷你购物车,因此当用户单击该图标时,它会显示他们购物车的内容(无需离开页面)。

当文档准备好后,jQuery 当前将不透明度设置为0。我想知道单击添加到购物车按钮时如何打开该迷你购物车?因为点击添加到购物车按钮时页面会刷新,所以我不知道如何在触发添加到购物车刷新后将下面的不透明度更改为1

这是 jQuery,我把我的尝试注释掉了。

jQuery(document).ready(function($) {

    $('#nw-cart-drop-content').css('opacity',0).addClass('nw-hidden');
    $('#nw-cart-drop-toggle').click(function(e) {
        if($('#nw-cart-drop-content').hasClass('nw-hidden')) {
            $('#nw-cart-drop-content').animate({opacity:1},500).removeClass('nw-hidden');
        }else {
            $('#nw-cart-drop-content').animate({opacity:0},500);
            $('#nw-cart-drop-content').addClass('nw-hidden');
        }
    });

    /*$('button.lato').click(function(e) {

            jQuery(document).ready(function($) {
                $('#nw-cart-drop-content').animate({opacity:1},500).removeClass('nw-hidden');
            });

    });*/

});

【问题讨论】:

  • URL 中是否有任何迹象表明已触发添加到购物车操作?否则,您可以有一个自定义选择器,在该操作之后检查新页面独有的任何内容,如果发现则取消隐藏购物车
  • @Anthony 有一个正确的想法,即刷新后您需要一个可用的“持久”变量/标志/指示符...如果 URL 中不可用,我建议使用 cookie。
  • @Anthony,是的,每当用户向购物车添加一些东西时,它就会附加在 url 之后:/? added-to-cart=13644 - 数字(13644)当然会根据什么而改变添加产品。因此,它的整体看起来类似于:my-website.com/shop-my-product/product/?added-to-cart=13644

标签: jquery wordpress woocommerce


【解决方案1】:
$('button.lato').click(function(e) {
    $('#nw-cart-drop-content').animate({opacity:1},500).removeClass('nw-hidden');
});

我认为单击处理程序将在刷新之前执行。所以上面的 sn-p 应该可以工作。

【讨论】:

  • 页面刷新/提交和不透明样式/css丢失后DOM将重置
  • 这是我最初的方法,但就像@funcbigO 所说,一旦页面刷新,不透明度样式就会丢失,它会恢复为不透明度:0
【解决方案2】:

由于您在 cmets 中指出存在 URL 参数,因此您可以在函数中检查该参数。只需将以下示例中的硬编码 url (http://mysite.com/?added-to-cart=13644) 替换为“window.location”,现在只要保留查询字符串,购物车就会在页面提交后显示,这表明它是。

下面是工作示例:http://jsfiddle.net/X664G/7/

jQuery(document).ready(function($) {
    //alert(getParameter('http://mysite.com/?added-to-cart=13644','added-to-cart'));
    if (getParameter('http://mysite.com/?added-to-cart=13644','added-to-cart'))
       $('#nw-cart-drop-content').animate({opacity:1},500).removeClass('nw-hidden');
    else {
         $('#nw-cart-drop-content').animate({opacity:0},500);
         $('#nw-cart-drop-content').addClass('nw-hidden');
    }
    $('#nw-cart-drop-toggle').click(function(e) {
        if($('#nw-cart-drop-content').hasClass('nw-hidden')) {
            $('#nw-cart-drop-content').animate({opacity:1},500).removeClass('nw-hidden');
        }else {
            $('#nw-cart-drop-content').animate({opacity:0},500);
            $('#nw-cart-drop-content').addClass('nw-hidden');
        }
    });
});
function getParameter(url,param){
    url = url.split('?');
    var pattern = new RegExp(param+'=(.*?)(;|&|$)','gi');
    return url[1].split(pattern)[1];
}

【讨论】:

  • 我明白你的逻辑,这是有道理的,但由于某种原因它不起作用。它就像函数或 if/else 有问题,因为当页面首次加载或单击添加到购物车按钮后,迷你购物车仍显示不透明度:1。你在这里应该检查 url 的 ?然后把 mini cart 改成 opacity:1 对吧?
【解决方案3】:

在对 funcbigO 的方法进行了一些研究后,我想出了这个,它似乎工作正常。感谢所有帮助,希望这有助于其他人浏览。

if(window.location.href.indexOf("?added-to-cart=") > 0) {
       $('#nw-cart-drop-content').animate({opacity:1},500).removeClass('nw-hidden');
    } else {
        $('#nw-cart-drop-content').css('opacity',0).addClass('nw-hidden');
    }

    $('#nw-cart-drop-toggle').click(function(e) {
        if($('#nw-cart-drop-content').hasClass('nw-hidden')) {
            $('#nw-cart-drop-content').animate({opacity:1},500).removeClass('nw-hidden');
        }else {
            $('#nw-cart-drop-content').animate({opacity:0},500);
            $('#nw-cart-drop-content').addClass('nw-hidden');
        }
    });

【讨论】:

    【解决方案4】:

    请试试下面的代码,我还没有测试过代码!!

    jQuery(document).ready(function($) {
    
        $('#nw-cart-drop-content').css('opacity',0).addClass('nw-hidden');
        $('#nw-cart-drop-toggle').click(function(e) {
            SetCookie('CartAdded','yes',1);
            OpenCart();
        });  
           var isCartAdded = ReadCookie('CartAdded');
           if(CartAdded=='yes'){
               /// use the opacity code here 
           }
    
     });
    
         function OpenCart(){
               if($('#nw-cart-drop-content').hasClass('nw-hidden')) {
                  $('#nw-cart-drop-content').animate({opacity:1},500).removeClass('nw-hidden');
             }else {
                 $('#nw-cart-drop-content').animate({opacity:0},500);
                $('#nw-cart-drop-content').addClass('nw-hidden');
             }  
         }
    
        function SetCookie(cookieName,cookieValue,nDays) {
                 var today = new Date();
                 var expire = new Date();
                if (nDays==null || nDays==0) nDays=1;
                 expire.setTime(today.getTime() + 3600000*24*nDays);
                 document.cookie = cookieName+"="+escape(cookieValue)+ ";expires="+expire.toGMTString();
          }
    
          function ReadCookie(cookieName) {
                 var theCookie=" "+document.cookie;
                 var ind=theCookie.indexOf(" "+cookieName+"=");
                 if (ind==-1) ind=theCookie.indexOf(";"+cookieName+"=");
                 if (ind==-1 || cookieName=="") return "";
                 var ind1=theCookie.indexOf(";",ind+1);
                 if (ind1==-1) ind1=theCookie.length; 
              return unescape(theCookie.substring(ind+cookieName.length+2,ind1));
            }
    

    【讨论】:

    • 这不起作用,因为它一直显示菜单小部件,一旦用户单击添加到购物车按钮 (button.lato),我只需要将不透明度更改为 1。我的问题是页面刷新后将不透明度设置为 1。不过谢谢
    猜你喜欢
    • 1970-01-01
    • 2013-08-10
    • 2011-07-14
    • 1970-01-01
    • 2017-02-27
    • 2012-05-22
    • 2014-04-04
    • 2020-12-27
    • 2018-01-05
    相关资源
    最近更新 更多