Uncaught SyntaxError: Unexpected token ')' 在用于 Shopify 商店的自定义 js 文件中

时间:2021-04-06 08:23:26

标签: javascript jquery

我向 Shopify 商店添加了一个自定义 .js 文件。尽管进行了多次尝试,但我似乎无法找到导致此错误的原因。请检查下面的代码,让我知道我需要更正代码以修复错误的位置。纠正 VS 代码指出的其他问题无助于修复错误。我仔细查找了每个代码块/函数块的开始和结束大括号。

// Listener for variant:changed event in product page.
document.addEventListener('variant:changed', function(event) {
  var variant = event.detail.variant; // Gives access to variant details
  var fulfillment_info_str = "";
  var free_shipping_applicable = (variant.price >= (sku_free_shipping_threshold[variant.id] * 100)) ? true : false;

  // In the Variant Fulfillment Info, add the Back Order information or the Fulfillment Info
  if (sku_backorder_info[ variant.id ] != "") {
    fulfillment_info_str = sku_backorder_info[ variant.id ];
  } else {
    fulfillment_info_str = "In stock!  " + sku_fulfillment_info;
    if (!free_shipping_applicable) {
      fulfillment_info_str += ". Purchase $" + sku_free_shipping_threshold[variant.id] + " " +vendor_name+ " products for FREE shipping";
    }
  }
  document.querySelector(".variant-fulfillment-info").innerHTML = fulfillment_info_str;
});


//  var vendor_name= $(".ProductMeta__Vendor").text();

//$('h2').hide();
//$('body').append("vendor name = " + vendor_name);
//$('body').append(jQuery.fn.jquery);

var loadScript = function(url, callback){
    var script = document.createElement("script")
    script.type = "text/javascript";
 
    if (script.readyState){  //IE
        script.onreadystatechange = function(){
            if (script.readyState == "loaded" ||
                    script.readyState == "complete"){
                script.onreadystatechange = null;
                callback();
            }
        };
    } else {  //Others
        script.onload = function(){
            callback();
        };
    }
 
    script.src = url;
    document.getElementsByTagName("head")[0].appendChild(script);
};

if ((typeof jQuery === 'undefined') || (parseFloat(jQuery.fn.jquery) < 1.7)) {
  loadScript('//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js', function(){
    jQuery191 = jQuery.noConflict(true);
    myAppJavaScript(jQuery191);
  });
} else {
  myAppJavaScript(jQuery);
}

var myAppJavaScript = function($){
 // $('h2').hide();
//$('body').append(jQuery.fn.jquery);
 // $('body').append('<p>Your app is using jQuery version '+$.fn.jquery+'</p>');
};

// change the menu icon from click to mouseover
var myAppJavaScript = function($){

  $(".Icon-Wrapper").mouseover(function(){
  $(this).trigger("click");
  });
  
// the little circle and down-arrown on main home page - CHARCOAL and BLACK 3/23/2020 AB
//  $(".Slideshow__ScrollButton").css("background-color","#6A6A6A")   
  $(".flickity-viewport").after('<div style="padding-left:10px;text-align:center;color:#000000;font-weight:bold;">MORE &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BELOW</div><br />')

// Electric Mirror backlit mirrors - changes
  if ((document.title.indexOf("Electric Mirror")>-1 && document.location.href.indexOf("backlit")>0) || document.location.href.indexOf("tv")>0){  
    // correct the shipping time
    $(".variant-fulfillment-info").html('<span style="font-size:1.1em">Shipped <span style="font-weight:bold;color:#0000FF">FREE</span> in about 1 week, direct from the factory.</span>');
    // get "Backlit Size" to appear as "Size"
    var sizetext= $(".ProductForm__OptionName").html();
    $(".ProductForm__OptionName").html(sizetext.replace("Backlit ",""));
  }
  
// Phrase appears beneath the header logo - commented
//$(".Header__LogoImage--transparent, .Header__LogoImage--primary").after('<br /><div style="display:none" id="free49">FREE SHIPPING over $49</div>');
//  $( window ).scroll(function() {
//    $("#free49").show();
//  });  

//  *******************  copy of PMM custom.js file  ******************************************************************

function get_pmm_shipping_text() {
    var v_text = "",page_title,meta_string,pmm_vendor_code,pmm_price,pmm_sku,
    meta,meta_string,
    exceptions="KE OM TB JV E_M EL",
    notFree="BB,LC,TB,JA,MD",
    ship_info="",cost="",free="",p=0,q=0,weeks="",
    little_box= '<img src="https://cdn.shopify.com/s/files/1/0048/2675/9279/t/9/assets/free-shipping.png" class="altattr" alt="Free Shipping">',
    little_plane= '<img src="https://images.reflectperfection.com/5f89061a4c6ab.png" class="altattr" alt="Air Express">';
    
    //  get the vendor, sku, and price
    meta_string = JSON.stringify(meta);
    meta_string = meta_string.replace(/[\/{\}\[\]\"]/g, '');
    
    p = meta_string.indexOf("sku");
    pmm_vendor_code = meta_string.substr(p+4,2);
    q = meta_string.substr(p+4).indexOf(",");
    pmm_sku = meta_string.substr(p+4,q);
    pmm_sku = pmm_sku.replace(/[\-P\-]/,"");
    p = meta_string.indexOf("price");
    q = meta_string.substr(p+6).indexOf(",");
    pmm_price = meta_string.substr(p+6,q);
            
    // NOTE:  pmm_vendor_code, pmm_sku and  pmm_price are pre-existing variables
    console.log("Vendor Code=" + pmm_vendor_code + ", SKU=" + pmm_sku + "Price=" + pmm_price);

    notFree.indexOf(pmm_vendor_code)>-1 ? free="" : free = "FREE,"; // if prefix not in "notFree" variable, shipping is FREE regardless of price.
    pmm_price > 4900 ? free="FREE," : free="" ; // everything over $49 ships free.
    // thresh>"" && netprice<thresh ? free="" : ''; // below shipping threshold nullifies free shipping  (thresh and netprice are not defined)
    if (pmm_vendor_code == "EM" || pmm_vendor_code == "E2" ){ // handles Electric Mirror mirror types
        page_title = $(".ProductMeta__Title").text();
        
        if (page_title.indexOf("TV")>-1){
            weeks = "4 to 6";
        }
        if (page_title.indexOf("Smart")>-1){
            weeks = "6 to 8";
        }
        if (page_title.indexOf("Backlit")>-1){
            weeks = "1 to 2";
        }
        if (page_title.indexOf("Shower")>-1 || page_title.indexOf("Cabinet")>-1){
            weeks = "2";
        }
        if (page_title.indexOf("Wardrobe")>-1){
            weeks = "3 to 4";
        }
        if (weeks > "" ){
            document.getElementsByClassName("available")[0].innerText=""; // eliminates IN STOCK from page
            pmm_vendor_code = "E_M"; 
        }
    }
    
    switch(pmm_vendor_code){  // exceptions items to vendor Free or Not-Free
        case "BB" : pmm_sku == "BB01" ? free = "FREE," : '' ;
        case "JA" : pmm_price > "32" ? free = "FREE," : '';
        case "MD" : pmm_price > "32" ? free = "FREE," : '';
        case "LC" : pmm_price > "57" ? free = "FREE," : '';
    }

    // REMEMBER free (lower case) is a variable
    cost = "In stock! &nbsp;Shipped "+free+" usually on the ";
    switch (pmm_vendor_code){
        case "AA" : ship_info=cost+"3<sup>rd</sup> to 5<sup>th</sup> " ; break; // Aamsco
        case "AB" : ship_info=cost+"1<sup>st</sup> or 2<sup>nd</sup> " ; break; // Amba
        case "AG" : ship_info=cost+"1<sup>st</sup> or 2<sup>nd</sup> " ; break; // alkaglam
        case "AY" : ship_info=cost+"2<sup>nd</sup> to 4<sup>th</sup> "; break; // ayurderm
        case "BB" : ship_info=cost+"next " ; break; // NOT free -butterbabes
        case "CL" : ship_info=cost+"2<sup>nd</sup> to 4<sup>th</sup> " ; break; // clear mirror
        case "CB" : ship_info=cost+"same or next "; break; // cannaBon
        case "CP" : ship_info=cost+"1<sup>st</sup> or 2<sup>nd</sup> " ; break;  // contrapac
        case "CY" : ship_info=cost+"same or next " ; break;  // cyberderm
        case "DB" : ship_info=cost+"same or next " ; break; // Dear by Renee
        case "DN" : ship_info=cost+"next " ; break;  // dia naturals
        case "E3" : ship_info=cost+"3<sup>rd</sup> to 6<sup>th</sup> " ; break; // electric mirror Cordova brand
        case "EM" : ship_info=cost+"4<sup>th</sup> to 6<sup>th</sup> " ; break; // electric mirror
        case "FS" : ship_info=cost+"2<sup>nd</sup> " ; break; // foster and lake
        case "GH" : ship_info=cost+"1<sup>st</sup> or 2<sup>nd</sup> " ; break; // stan pardente ghd
        case "HR" : ship_info=cost+"same or next "; break; // hair restoration
        case "JA" : ship_info=cost+"same or next " ; break;  // JAVA skin care
        case "JD" : ship_info=cost+"3<sup>rd</sup> to 5<sup>th</sup> ";break; // Jerdon
        case "KY" : ship_info=cost+"1<sup>st</sup> or 2<sup>nd</sup> "; break;  // kimball & young / aptations
        case "LC" : ship_info=cost+"same or next "; break;  // l.a. christine
        case "LD" : ship_info=cost+"2<sup>nd</sup> "; break; // lumidesign
        case "LU" : ship_info=cost+"same or next "; break;  // luce skincare
        case "LW" : ship_info=cost+"1<sup>st</sup> or 2<sup>nd</sup> " ; break; // stemulation
        case "MD" : ship_info=cost+"1<sup>st</sup> or 2<sup>nd</sup> "; break; // MDSolarSciences
        case "MH" : ship_info=cost+"2<sup>nd</sup> to 3<sup>rd</sup> " ; break; // more hair naturally
        case "MY" : ship_info=cost+"2<sup>nd</sup> to 3<sup>rd</sup> " ; break; // marcus york
        case "RE" : ship_info=cost+"same or next "; break; // replete skincare
        case "NO" : ship_info=cost+"same or next "; break; // gentleman's foundry
        case "SK" : ship_info=cost+"next " ; break; // skin triks
        case "SQ" : ship_info=cost+"same or next " ; break; // skintifique
        case "SY" : ship_info=cost+"2<sup>nd</sup> or 3<sup>rd</sup>" ; break; // shunly
        case "TB" : ship_info=cost+"2<sup>nd</sup> or 3<sup>rd</sup>" ; break; // to bee products
        case "TH" : ship_info=cost+"1<sup>st</sup> or 2<sup>nd</sup> " ; break; // thalgo
        case "UC" : ship_info=cost+"2<sup>nd</sup> to 4<sup>th</sup>";break; // upper canada (danielle creations)
        case "VT" : ship_info=cost+"next " ; break;  // vintage traditions
        case "xx" : ship_info=cost+"same or next"; break; // pmm inventory product
    }
    console.log("Ship Info=" + ship_info);
    

    if (exceptions.indexOf(pmm_vendor_code)==-1){ // if vendor is NOT in the exceptions string cases above are used
            if (free=="FREE," ){ // display the little truck 
                v_text = little_box + ' &nbsp;<strong>' + ship_info + ' business day.</strong>';
            } else { // no little truck
                v_text = '<strong> ' + ship_info +' business day.</strong>';
            }
    } else { // following vendors must be included in the exceptions string on or near  line 4
        switch (pmm_vendor_code){
            case "EL" : v_text = '<span style="color:#A300FC;font-size:1.1em;font-weight:bold" >'+little_plane+' &nbsp;Formulated in the EU,  and Shipped FREE, directly to your door via Royal Mail International from Kent, England in 7-8 days.</span>'; break;
            case "E_M" : v_text = '<span style="color:#A300FC;font-size:1.1em;font-weight:bold" >'+little_box+' &nbsp;Custom made for you in the USA, and Shipped FREE, directly to your door via <span style="color:#4D148C;font-weight:bold">Fed</span><span style="color:#FF6200;font-weight:bold">Ex</span> or by Truck, in '+weeks+ ' weeks, directly from the Washington State factory.</span>'; break; 
            case "JV" : v_text = '<span style="color:#A300FC;font-size:1.1em;font-weight:bold" >'+little_plane+' &nbsp;Made in France, Shipped FREE, directly to you via <span style="color:#4D148C;font-weight:bold">Fed</span><span style="color:#FF6200;font-weight:bold">Ex</span> International Express</span> in about 7-10 days, directly from the Mexico warehouse.</span>'; break; // JVD
            case "KE" : v_text = '<span style="color:#A300FC;font-size:1.1em;font-weight:bold" >'+little_plane+' &nbsp;Shipped FREE, directly to you via <span style="color:#4D148C;font-weight:bold">Fed</span><span style="color:#FF6200;font-weight:bold">Ex</span> International Express</span> in about 21 days, directly from Germany.</span>'; break; // Keuco
            case "OM" : v_text = '<span style="font-size:1.1em;font-weight:bold">'+little_box+' 8 oz. size ships FREE.<br />Also shipped FREE: &nbsp;2 oz. size purchased together with 8 oz. size - or - 3 or more 2 oz. size.<br /><br />Shipment is from Canada after 1 business day. &nbsp;Time in transit to locations in the continental US is 3 to 5 business days.</span>'; break;  // oil me north
            case "TB" : v_text = '<span style="font-size:1.1em;font-weight:bold">Ships FREE when purchased together with ToBee 3-Pack</span>'; break;  // to bee products
        }
    }
    console.log("V Text=" + v_text);
    return v_text;
}); // end of get_pmm_shipping_text()

// ---------------------------------  miroir brot vacation --------------------------------------------------------

    /*if(docloch.indexOf("miroir-brot")>-1){
            var brot_start = new Date(2019,06,28),
                brot_end = new Date(2019,07,30);
            if (today_date => brot_start && today_date <= brot_end){
                $(".product-name").after('<div id="brot_vacation" style="text-align: left;font-size: large; color: #9900ff;">Miroir Brot will be CLOSED for summer vacation from August 5th through August 30th.<br /><br /><strong>Order by <span style="color: #ff0000;">Thursday, July 25th</span> for shipment before vacation closing.</strong><br /><br />Orders placed after July 25th will be shipped after August 30th.</div>');
            }
    } */

$(document).ready(function(v_text) {
    var page_title = $(".ProductMeta__Title").text();
    
    // Commented out as the Tab is not opening by default.
    // $("#tab-label-product.info.description").click();
    setTimeout(function() {             
        document.querySelector(".variant-fulfillment-info").innerHTML = v_text;
        //$(".variant_fulfillment-info").text(get_pmm_shipping_text()); }, 750); // end of setTimeout
    // make the word CLOSEOUT red on product pages
    if (page_title.indexOf("CLOSEOUT!")>-1 || page_title.indexOf("OPEN BOX!")>-1){
        page_title = page_title.replace("CLOSEOUT!",'<span style="color:#FF0000">CLOSEOUT!</span>');
        page_title = page_title.replace("OPEN BOX!",'<span style="color:#FF0000">OPEN BOX!</span>');
        $(".ProductMeta__Title").html(page_title);
    }

    // Normally add the bind to a parent which will be stable.
    
    // commented out following that deals with Klarna AB 10/22/2020
 /*   $("#product-options-wrapper select").change(function() {

      // setTimeout() used to ensure a time interval between Magento populating the span
      // and jQuery reading the span.
      setTimeout(function() {
        // Get the value of the span element
        var price = $(".price-box .normal-price .price-wrapper span.price").html();

        // Clean and Convert the value to cents
        var priceCents = parseInt(parseFloat(price.replace(/[^\d.]/g,'')) * 100);

        // If value is different from existing Klarna product placement value, update it.
        // and then call Klarna with refresh-event to refresh the placement.
        var oldPurchaseAmt = $(".product-add-form klarna-placement").attr("data-purchase-amount");
        if (priceCents != oldPurchaseAmt) {
          $(".product-add-form klarna-placement").attr("data-purchase-amount", priceCents);

          // Trigger event to refresh
          window.KlarnaOnsiteService = window.KlarnaOnsiteService || [];
          window.KlarnaOnsiteService.push({ eventName: 'refresh-placements' });
        }
      }, 200);
    }); */
}); // end of document.ready

//  *******************  end of copy of PMM custom.js file  ******************************************************************

  
} // end of jQuery

1 个答案:

答案 0 :(得分:1)

意外的 )PMM custom.js 中,get_pmm_shipping_text() 在此结束。

此外,在同一个文件中缺少 }),就在 // end of document.ready 之前