[{"data":1,"prerenderedAt":1932},["ShallowReactive",2],{"header:help":3,"footer:default":67,"story:navigation\u002Fsearch:help":250,"story:help\u002Fcategories":288,"story:help\u002Farticles\u002Fjavascript-events-reference":314,"no-guide:javascript-events-reference":59,"article:\u002Fhelp\u002Farticles\u002Fjavascript-events-reference":1674,"story:contact":1715,"help:tree:8e974025-25f6-44e2-b9c4-aa91fa7b2924":1905,"_apollo:default":1931},{"name":4,"created_at":5,"published_at":6,"updated_at":7,"id":8,"uuid":9,"content":10,"slug":57,"full_slug":58,"sort_by_date":59,"position":60,"tag_list":61,"is_startpage":24,"parent_id":62,"meta_data":59,"group_id":63,"first_published_at":64,"release_id":59,"lang":65,"path":59,"alternates":66,"default_full_slug":59,"translated_slugs":59},"Help Center Header","2024-08-09T18:06:34.939Z","2024-10-21T21:58:39.217Z","2024-10-21T21:58:39.232Z",10082752,"3e9b88f7-c163-4657-a2f2-62532d600fad",{"_uid":11,"link":12,"badge":16,"items":17,"title":13,"buttons":50,"new_tab":24,"submenu":51,"alignment":13,"component":52,"badge_link":53,"top_menu_items":56},"e5645a1a-f991-40e8-8d67-e40ebc082b5a",{"id":13,"url":13,"linktype":14,"fieldtype":15,"cached_url":13},"","story","multilink","Help Center",[18,27,34,39,44],{"_uid":19,"link":20,"title":23,"new_tab":24,"submenu":25,"component":26},"5cbe2861-1f49-4166-97da-a4dddd8105e3",{"id":21,"url":13,"linktype":14,"fieldtype":15,"cached_url":22},"4c0a2d99-ec30-4579-8ef1-6bf5564d4839","help\u002Fcategories\u002F","Articles",false,[],"header___item",{"_uid":28,"link":29,"title":32,"new_tab":33,"component":26},"1c8edeb5-b9e9-4cb8-b1c6-c1f292f7d7cd",{"id":13,"url":30,"linktype":31,"fieldtype":15,"cached_url":30},"https:\u002F\u002Fwiki.foxycart.com\u002F","url","Documentation",true,{"_uid":35,"link":36,"title":38,"new_tab":33,"component":26},"8d7df70e-f087-4da0-b616-6f0e9a5af35c",{"id":13,"url":37,"linktype":31,"fieldtype":15,"cached_url":37},"https:\u002F\u002Fapi.foxycart.com\u002F","API Documentation",{"_uid":40,"link":41,"title":43,"new_tab":33,"component":26},"f76e7944-23d5-4652-87e4-cdae79272762",{"id":13,"url":42,"linktype":31,"fieldtype":15,"cached_url":42},"https:\u002F\u002Fstatus.foxy.io\u002F","System Status",{"_uid":45,"link":46,"title":49,"new_tab":24,"component":26},"0de16771-4c84-466c-a1da-d8568113c71f",{"id":47,"url":13,"linktype":14,"fieldtype":15,"cached_url":48},"01e4e370-f9b9-45af-8fa9-f15540699b0d","contact","Contact Us",[],[],"header",{"id":54,"url":13,"linktype":14,"fieldtype":15,"cached_url":55},"4a679eb7-662d-4ea4-a976-5a2acbf0b663","help\u002F",[],"help-header","navigation\u002Fhelp-header",null,20,[],10082747,"71b81c2e-5e09-48a1-a397-a3c72fcd344a","2022-09-21T14:50:25.655Z","default",[],{"name":68,"created_at":69,"published_at":70,"updated_at":71,"id":72,"uuid":73,"content":74,"slug":243,"full_slug":244,"sort_by_date":59,"position":245,"tag_list":246,"is_startpage":24,"parent_id":62,"meta_data":59,"group_id":247,"first_published_at":248,"release_id":59,"lang":65,"path":59,"alternates":249,"default_full_slug":59,"translated_slugs":59},"Default Footer","2024-08-09T18:06:59.024Z","2025-09-04T06:24:46.223Z","2025-09-04T06:24:46.241Z",10082753,"e59e67ac-248a-482f-84a1-53d4f318186a",{"_uid":75,"about":76,"logos":77,"socials":82,"sections":108,"component":225,"cta_title":226,"bottom_links":227,"cta_subtitle":241,"cta_button_link":242,"cta_button_text":183},"830983f5-c4c4-43c8-b150-86a5e3fa6dc8","Foxy’s hosted cart & payment page allow you to sell anything, using your existing website or platform.",[78],{"id":79,"alt":13,"name":13,"focus":13,"title":13,"filename":80,"copyright":13,"fieldtype":81},14760,"https:\u002F\u002Fa-us.storyblok.com\u002Ff\u002F1001040\u002Fx\u002F3b030847ec\u002Fb-corp.svg","asset",[83,90,96,102],{"_uid":84,"icon":85,"link":86,"name":88,"component":89},"faf0a618-ea94-42ea-9182-03be18c43216","fa-facebook",{"id":13,"url":87,"linktype":31,"fieldtype":15,"cached_url":87},"https:\u002F\u002Fwww.facebook.com\u002Ffoxycart","Facebook","footer___social",{"_uid":91,"icon":92,"link":93,"name":95,"component":89},"14309c18-7e79-423e-b375-34555bac0811","fa-instagram",{"id":13,"url":94,"linktype":31,"fieldtype":15,"cached_url":94},"https:\u002F\u002Fwww.instagram.com\u002Ffoxy_io","Instagram",{"_uid":97,"icon":98,"link":99,"name":101,"component":89},"8f7fe7cf-0dd3-4596-8334-226ea466716a","fa-linkedin",{"id":13,"url":100,"linktype":31,"fieldtype":15,"cached_url":100},"https:\u002F\u002Fwww.linkedin.com\u002Fcompany\u002Ffoxycart.com","LinkedIn",{"_uid":103,"icon":104,"link":105,"name":107,"component":89},"90a675b4-dd97-40b5-be09-00a87223d4c5","fa-youtube",{"id":13,"url":106,"linktype":31,"fieldtype":15,"cached_url":106},"https:\u002F\u002Fwww.youtube.com\u002Fuser\u002Ffoxycart","Youtube",[109,139,184,206],{"_uid":110,"name":111,"items":112,"component":138},"82849945-282f-488c-b18d-a8d2252f514a","Company",[113,120,126,132],{"_uid":114,"link":115,"title":118,"new_tab":24,"component":119},"1f699ab1-938b-4d9d-9825-aabcbe6f57fe",{"id":116,"url":13,"linktype":14,"fieldtype":15,"cached_url":117},"63634293-a749-4226-9439-9f38ee6dcda0","about-us","About Us","footer___menu_items",{"_uid":121,"link":122,"title":125,"new_tab":24,"component":119},"b26b00f1-a0e7-4be2-8ab3-428b8cc841f8",{"id":123,"url":13,"linktype":14,"fieldtype":15,"cached_url":124},"26cb7c55-faed-4a77-a291-1552d4111b3e","how-foxy-works","How Foxy Works",{"_uid":127,"link":128,"title":131,"new_tab":24,"component":119},"b40c68a0-1ceb-4226-9515-6176534f61fe",{"id":129,"url":13,"linktype":14,"fieldtype":15,"cached_url":130},"dc6657d7-7f4f-4c0d-b781-e971b038ee26","for-good","Foxy For Good",{"_uid":133,"link":134,"title":137,"new_tab":24,"component":119},"3ad0c134-bef9-4fff-b891-e09f16109036",{"id":135,"url":13,"linktype":14,"fieldtype":15,"cached_url":136},"23cae210-baf4-4588-9862-d09f4f52ccd2","brand-assets","Brand Assets","footer___section",{"_uid":140,"name":141,"items":142,"component":138},"a6805fa8-ac60-47f1-b8f0-f27aded0afbe","Product",[143,149,155,161,167,173,179],{"_uid":144,"link":145,"title":148,"new_tab":24,"component":119},"b39c8a4e-2383-486f-b76a-11fbb15d8134",{"id":146,"url":13,"linktype":14,"fieldtype":15,"cached_url":147},"bb04690f-fe98-4ce6-80be-05b950f2364f","features\u002F","Features",{"_uid":150,"link":151,"title":154,"new_tab":24,"component":119},"64f8a41f-c181-433d-bc0a-fc94e71ecbf6",{"id":152,"url":13,"linktype":14,"fieldtype":15,"cached_url":153},"c450c58d-761d-48c0-a9af-0b064611689b","pricing","Pricing",{"_uid":156,"link":157,"title":160,"new_tab":24,"component":119},"6e0b287f-fd8c-4146-9e0e-0ab0b5c9ce3c",{"id":158,"url":13,"linktype":14,"fieldtype":15,"cached_url":159},"fab20ad9-e76a-4947-b709-3a6fdfa88028","blog\u002Fcategories\u002Fproduct-updates","Product Updates",{"_uid":162,"link":163,"title":166,"new_tab":24,"component":119},"47e5a074-a6b5-4f1c-8c2f-89a2ae9f83eb",{"id":164,"url":13,"linktype":14,"fieldtype":15,"cached_url":165},"d2c83612-d611-47f3-a3b4-ca7fe08540b8","changelogs\u002F","Changelogs",{"_uid":168,"link":169,"title":172,"new_tab":24,"component":119},"b5c08774-542f-4ffd-b357-c94d674488b9",{"id":170,"url":13,"linktype":14,"fieldtype":15,"cached_url":171},"08876121-0df3-4ed9-aa11-902b3e41cd02","whats-next","What's Next",{"_uid":174,"link":175,"title":178,"new_tab":24,"component":119},"9c2704ed-6d9f-43e1-9e67-c8d91c083288",{"id":176,"url":13,"linktype":14,"fieldtype":15,"cached_url":177},"056a7857-b18f-4025-8f97-91a38fc19bc8","compare\u002F","Compare",{"_uid":180,"link":181,"title":183,"new_tab":24,"component":119},"5f2db35b-674b-406a-8fa7-d246633af9fe",{"id":13,"url":182,"linktype":31,"fieldtype":15,"cached_url":182},"https:\u002F\u002Fadmin.foxy.io\u002Fsign-up","Try Foxy Free",{"_uid":185,"name":186,"items":187,"component":138},"63fa1f29-4252-4640-9922-fe310e69e54a","Security",[188,194,200],{"_uid":189,"link":190,"title":193,"new_tab":24,"component":119},"1158ddb6-9eb0-466f-8eb6-7ca2ae66c8b8",{"id":191,"url":13,"linktype":14,"fieldtype":15,"cached_url":192},"1f58fb2c-8681-4742-b6e8-09999beae9f6","security-contact","Security Contact",{"_uid":195,"link":196,"title":199,"new_tab":24,"component":119},"9a79c54a-6022-4dfd-854b-766f5e4703ba",{"id":197,"url":13,"linktype":14,"fieldtype":15,"cached_url":198},"55cbfcc3-425a-4261-8037-54e919851d2d","pci","PCI Compliance",{"_uid":201,"link":202,"title":205,"new_tab":24,"component":119},"0b85f5b6-9534-4071-b323-b39d053dd4d7",{"id":203,"url":13,"linktype":14,"fieldtype":15,"cached_url":204},"c3ac0fe3-83e2-4879-afbd-d4c83e1590df","help\u002Farticles\u002Four-official-domains-public-code","Domains & Codebases",{"_uid":207,"name":208,"items":209,"component":138},"998ded67-d107-49f4-8154-ca6be51671ec","Support",[210,213,216,219,222],{"_uid":211,"link":212,"title":16,"new_tab":24,"component":119},"594ffd35-3049-4004-bb08-0db568ebd819",{"id":54,"url":13,"linktype":14,"fieldtype":15,"cached_url":55},{"_uid":214,"link":215,"title":32,"new_tab":33,"component":119},"0a1a55ab-a985-4f9d-8b42-26da714d0c1c",{"id":13,"url":30,"linktype":31,"fieldtype":15,"cached_url":30},{"_uid":217,"link":218,"title":38,"new_tab":33,"component":119},"61e0b7c8-aadf-419b-a339-b3ccabc65bf4",{"id":13,"url":37,"linktype":31,"fieldtype":15,"cached_url":37},{"_uid":220,"link":221,"title":43,"new_tab":33,"component":119},"fd67a89e-1c54-4d31-94b5-64be999062d6",{"id":13,"url":42,"linktype":31,"fieldtype":15,"cached_url":42},{"_uid":223,"link":224,"title":49,"new_tab":24,"component":119},"231a6f71-e996-4ad4-b033-d4d5542f34f0",{"id":47,"url":13,"linktype":14,"fieldtype":15,"cached_url":48},"footer","Get started with our *unlimited free trial*.",[228,235],{"_uid":229,"link":230,"text":233,"component":234},"f0b77210-2632-45a2-8436-e57cad84d01a",{"id":231,"url":13,"linktype":14,"fieldtype":15,"cached_url":232},"60ba16a2-c1f4-485f-b978-8d2eeeafbf5a","terms-of-service","Terms of Service","footer___bottom_links",{"_uid":236,"link":237,"text":240,"component":234},"4bd497b0-993f-4b4d-a5b7-8a49c7c8fec9",{"id":238,"url":13,"linktype":14,"fieldtype":15,"cached_url":239},"332302b9-1d18-4016-b9c8-9b33c72d782b","privacy-policy","Privacy Policy","No credit card required.",{"id":13,"url":182,"linktype":31,"fieldtype":15,"cached_url":182},"default-footer","navigation\u002Fdefault-footer",50,[],"11006268-07f9-41e9-96f3-c51fb723399d","2022-09-21T20:39:02.357Z",[],{"name":251,"created_at":252,"published_at":253,"updated_at":254,"id":255,"uuid":256,"content":257,"slug":279,"full_slug":282,"sort_by_date":59,"position":283,"tag_list":284,"is_startpage":24,"parent_id":62,"meta_data":59,"group_id":285,"first_published_at":286,"release_id":59,"lang":65,"path":59,"alternates":287,"default_full_slug":59,"translated_slugs":59},"Search","2024-10-21T22:08:54.973Z","2025-05-26T09:17:25.790Z","2025-05-26T09:17:25.804Z",13592003,"14cbc359-9ac1-4a7a-a8de-ad4ac8ef26d4",{"_uid":258,"name":251,"indices":259,"summary":13,"component":279,"primary_image":280},"5e4a56e8-76f1-4790-b3a7-70f1be97d042",[260,265,269,274],{"key":261,"_uid":262,"icon":13,"name":263,"component":264},"all","c12a3210-7323-4273-8217-5215e52efe84","All","index",{"key":266,"_uid":267,"icon":268,"name":23,"component":264},"help_center_article","5acff080-95e4-44d3-8dcf-1b19720af382","fa-file-alt",{"key":270,"_uid":271,"icon":272,"name":273,"component":264},"help_center_guide","b8fbc206-c083-471e-a1f0-0ebeb90a669d","fa-book","Guides",{"key":275,"_uid":276,"icon":277,"name":278,"component":264},"blog_post","23419e83-2e56-4c4c-8a05-9fd1b3c9a9bd","fa-file-image","Blog Posts","search",{"id":59,"alt":59,"name":13,"focus":59,"title":59,"source":59,"filename":13,"copyright":59,"fieldtype":81,"meta_data":281},{},"navigation\u002Fsearch",60,[],"11e1fd31-95cd-4fc9-b736-8b8910663e6c","2024-10-21T23:17:05.904Z",[],{"name":23,"created_at":289,"published_at":290,"updated_at":291,"id":292,"uuid":21,"content":293,"slug":307,"full_slug":22,"sort_by_date":59,"position":308,"tag_list":309,"is_startpage":33,"parent_id":310,"meta_data":59,"group_id":311,"first_published_at":312,"release_id":59,"lang":65,"path":59,"alternates":313,"default_full_slug":59,"translated_slugs":59},"2022-09-19T14:42:29.685Z","2024-07-30T18:17:22.506Z","2024-07-30T18:17:22.525Z",2660,{"_uid":294,"icon":13,"name":23,"guides":295,"pinned":24,"summary":296,"category":13,"component":297,"blog_posts":298,"content_hub":24,"icon_custom":299,"case_studies":300,"faq_sections":301,"help_articles":302,"featured_guides":303,"mailbox_category":13,"featured_articles":304,"featured_blog_posts":305,"featured_case_studies":306},"d6dae89a-907a-4bf7-82de-fe2ba875ee6e",[],"Get your questions answered with our browsable knowledge base.","help_center_category",[],{"id":59,"alt":59,"name":13,"focus":59,"title":59,"filename":13,"copyright":59,"fieldtype":81},[],[],[],[],[],[],[],"categories",530,[],2658,"19ebcdd2-027f-47f5-9a5b-a8992c959578","2022-09-19T16:24:39.219Z",[],{"name":315,"created_at":316,"published_at":317,"updated_at":318,"id":319,"uuid":320,"content":321,"slug":1667,"full_slug":1668,"sort_by_date":59,"position":1669,"tag_list":1670,"is_startpage":24,"parent_id":1671,"meta_data":59,"group_id":1672,"first_published_at":317,"release_id":59,"lang":65,"path":59,"alternates":1673,"default_full_slug":59,"translated_slugs":59},"JavaScript events reference","2026-07-20T21:26:22.052Z","2026-07-20T21:42:37.922Z","2026-07-20T21:42:37.946Z",200266473730794,"8e974025-25f6-44e2-b9c4-aa91fa7b2924",{"_uid":322,"body":323,"name":315,"image":1662,"pinned":24,"summary":1664,"category":1665,"component":266,"related_articles":1666},"e060c52c-0753-41c3-8846-899d2092f439",{"type":324,"content":325},"doc",[326,340,347,353,358,363,380,385,391,462,467,590,595,907,912,1200,1205,1210,1388,1393,1398,1473,1478,1483,1494,1499,1522,1527,1532,1537,1542,1547,1552,1557,1562,1579,1584,1589,1606,1611,1616],{"type":327,"attrs":328,"content":329},"paragraph",{"textAlign":59},[330,333,338],{"text":331,"type":332},"Foxy’s JavaScript fires events for nearly everything that happens on the cart, checkout, and receipt. Bind to any of these with ","text",{"text":334,"type":332,"marks":335},"FC.client.on()",[336],{"type":337},"code",{"text":339,"type":332}," to hook in your own custom behavior.",{"type":341,"attrs":342,"content":344},"heading",{"level":343,"textAlign":59},2,[345],{"text":346,"type":332},"Binding to an event",{"type":348,"attrs":349,"content":350},"code_block",{"class":59},[351],{"text":352,"type":332},"FC.client.on('cart-submit', function (params, next) {\n  \u002F\u002F your code here\n});\n",{"type":327,"attrs":354,"content":355},{"textAlign":59},[356],{"text":357,"type":332},"Bind and unbind calls can be chained:",{"type":348,"attrs":359,"content":360},{"class":59},[361],{"text":362,"type":332},"FC.client\n  .on('cart-item-remove', cartItemRemoveHandler)\n  .on('cart-item-remove.done', cartItemRemoveDoneHandler)\n  .on('cart-submit', cartSubmitHandler)\n  .on('cart-submit.done', cartSubmitDoneHandler);\n\nFC.client\n  .off('cart-item-remove', cartItemRemoveHandler)\n  .off('cart-submit', cartSubmitHandler);\n",{"type":327,"attrs":364,"content":365},{"textAlign":59},[366,368,372,374,378],{"text":367,"type":332},"Every event listed below also fires a corresponding ",{"text":369,"type":332,"marks":370},".done",[371],{"type":337},{"text":373,"type":332}," event once the action completes, for example ",{"text":375,"type":332,"marks":376},"cart-item-remove.done",[377],{"type":337},{"text":379,"type":332},".",{"type":341,"attrs":381,"content":382},{"level":343,"textAlign":59},[383],{"text":384,"type":332},"Available events",{"type":341,"attrs":386,"content":388},{"level":387,"textAlign":59},3,[389],{"text":390,"type":332},"Template events",{"type":392,"content":393},"table",[394,423],{"type":395,"content":396},"tableRow",[397,407,415],{"type":398,"attrs":399,"content":401},"tableHeader",{"colspan":400,"rowspan":400,"colwidth":59},1,[402],{"type":327,"attrs":403,"content":404},{"textAlign":59},[405],{"text":406,"type":332},"Event",{"type":398,"attrs":408,"content":409},{"colspan":400,"rowspan":400,"colwidth":59},[410],{"type":327,"attrs":411,"content":412},{"textAlign":59},[413],{"text":414,"type":332},"Description",{"type":398,"attrs":416,"content":417},{"colspan":400,"rowspan":400,"colwidth":59},[418],{"type":327,"attrs":419,"content":420},{"textAlign":59},[421],{"text":422,"type":332},"Params",{"type":395,"content":424},[425,436,444],{"type":426,"attrs":427,"content":428},"tableCell",{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[429],{"type":327,"attrs":430,"content":431},{"textAlign":59},[432],{"text":433,"type":332,"marks":434},"render.done",[435],{"type":337},{"type":426,"attrs":437,"content":438},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[439],{"type":327,"attrs":440,"content":441},{"textAlign":59},[442],{"text":443,"type":332},"Fires after a template block is updated.",{"type":426,"attrs":445,"content":446},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[447],{"type":327,"attrs":448,"content":449},{"textAlign":59},[450,454,456,460],{"text":451,"type":332,"marks":452},"selector",[453],{"type":337},{"text":455,"type":332}," — HTML selector for the block being rendered; ",{"text":457,"type":332,"marks":458},"block_id",[459],{"type":337},{"text":461,"type":332}," — name of the block being rendered",{"type":341,"attrs":463,"content":464},{"level":387,"textAlign":59},[465],{"text":466,"type":332},"Sidecart events",{"type":392,"content":468},[469,492,535,563],{"type":395,"content":470},[471,478,485],{"type":398,"attrs":472,"content":473},{"colspan":400,"rowspan":400,"colwidth":59},[474],{"type":327,"attrs":475,"content":476},{"textAlign":59},[477],{"text":406,"type":332},{"type":398,"attrs":479,"content":480},{"colspan":400,"rowspan":400,"colwidth":59},[481],{"type":327,"attrs":482,"content":483},{"textAlign":59},[484],{"text":414,"type":332},{"type":398,"attrs":486,"content":487},{"colspan":400,"rowspan":400,"colwidth":59},[488],{"type":327,"attrs":489,"content":490},{"textAlign":59},[491],{"text":422,"type":332},{"type":395,"content":493},[494,504,512],{"type":426,"attrs":495,"content":496},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[497],{"type":327,"attrs":498,"content":499},{"textAlign":59},[500],{"text":501,"type":332,"marks":502},"sidecart-show",[503],{"type":337},{"type":426,"attrs":505,"content":506},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[507],{"type":327,"attrs":508,"content":509},{"textAlign":59},[510],{"text":511,"type":332},"When the sidecart is displayed.",{"type":426,"attrs":513,"content":514},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[515],{"type":327,"attrs":516,"content":517},{"textAlign":59},[518,522,524,528,530,533],{"text":519,"type":332,"marks":520},"element",[521],{"type":337},{"text":523,"type":332}," — HTML element that triggered the add to cart; ",{"text":525,"type":332,"marks":526},"data",[527],{"type":337},{"text":529,"type":332}," — parameters in the add to cart; ",{"text":31,"type":332,"marks":531},[532],{"type":337},{"text":534,"type":332}," — URL version of the add to cart",{"type":395,"content":536},[537,547,555],{"type":426,"attrs":538,"content":539},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[540],{"type":327,"attrs":541,"content":542},{"textAlign":59},[543],{"text":544,"type":332,"marks":545},"sidecart-hide",[546],{"type":337},{"type":426,"attrs":548,"content":549},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[550],{"type":327,"attrs":551,"content":552},{"textAlign":59},[553],{"text":554,"type":332},"When the sidecart is hidden.",{"type":426,"attrs":556,"content":557},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[558],{"type":327,"attrs":559,"content":560},{"textAlign":59},[561],{"text":562,"type":332},"—",{"type":395,"content":564},[565,575,583],{"type":426,"attrs":566,"content":567},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[568],{"type":327,"attrs":569,"content":570},{"textAlign":59},[571],{"text":572,"type":332,"marks":573},"sidecart-detach",[574],{"type":337},{"type":426,"attrs":576,"content":577},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[578],{"type":327,"attrs":579,"content":580},{"textAlign":59},[581],{"text":582,"type":332},"After the sidecart is hidden and detached from the DOM.",{"type":426,"attrs":584,"content":585},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[586],{"type":327,"attrs":587,"content":588},{"textAlign":59},[589],{"text":562,"type":332},{"type":341,"attrs":591,"content":592},{"level":387,"textAlign":59},[593],{"text":594,"type":332},"Cart events",{"type":392,"content":596},[597,620,661,699,730,761,793,825,857],{"type":395,"content":598},[599,606,613],{"type":398,"attrs":600,"content":601},{"colspan":400,"rowspan":400,"colwidth":59},[602],{"type":327,"attrs":603,"content":604},{"textAlign":59},[605],{"text":406,"type":332},{"type":398,"attrs":607,"content":608},{"colspan":400,"rowspan":400,"colwidth":59},[609],{"type":327,"attrs":610,"content":611},{"textAlign":59},[612],{"text":414,"type":332},{"type":398,"attrs":614,"content":615},{"colspan":400,"rowspan":400,"colwidth":59},[616],{"type":327,"attrs":617,"content":618},{"textAlign":59},[619],{"text":422,"type":332},{"type":395,"content":621},[622,632,640],{"type":426,"attrs":623,"content":624},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[625],{"type":327,"attrs":626,"content":627},{"textAlign":59},[628],{"text":629,"type":332,"marks":630},"cart-submit",[631],{"type":337},{"type":426,"attrs":633,"content":634},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[635],{"type":327,"attrs":636,"content":637},{"textAlign":59},[638],{"text":639,"type":332},"When the cart is loaded — as an add to cart, view cart, empty cart request, etc.",{"type":426,"attrs":641,"content":642},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[643],{"type":327,"attrs":644,"content":645},{"textAlign":59},[646,649,651,654,656,659],{"text":519,"type":332,"marks":647},[648],{"type":337},{"text":650,"type":332}," — HTML element that triggered the request; ",{"text":525,"type":332,"marks":652},[653],{"type":337},{"text":655,"type":332}," — parameters in the cart request; ",{"text":31,"type":332,"marks":657},[658],{"type":337},{"text":660,"type":332}," — URL version of the request",{"type":395,"content":662},[663,673,681],{"type":426,"attrs":664,"content":665},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[666],{"type":327,"attrs":667,"content":668},{"textAlign":59},[669],{"text":670,"type":332,"marks":671},"cart-item-quantity-update",[672],{"type":337},{"type":426,"attrs":674,"content":675},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[676],{"type":327,"attrs":677,"content":678},{"textAlign":59},[679],{"text":680,"type":332},"When a quantity is changed in the cart.",{"type":426,"attrs":682,"content":683},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[684],{"type":327,"attrs":685,"content":686},{"textAlign":59},[687,691,693,697],{"text":688,"type":332,"marks":689},"id",[690],{"type":337},{"text":692,"type":332}," — product ID being adjusted; ",{"text":694,"type":332,"marks":695},"quantity",[696],{"type":337},{"text":698,"type":332}," — new quantity amount",{"type":395,"content":700},[701,711,719],{"type":426,"attrs":702,"content":703},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[704],{"type":327,"attrs":705,"content":706},{"textAlign":59},[707],{"text":708,"type":332,"marks":709},"cart-item-remove",[710],{"type":337},{"type":426,"attrs":712,"content":713},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[714],{"type":327,"attrs":715,"content":716},{"textAlign":59},[717],{"text":718,"type":332},"When a product is removed from the cart.",{"type":426,"attrs":720,"content":721},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[722],{"type":327,"attrs":723,"content":724},{"textAlign":59},[725,728],{"text":688,"type":332,"marks":726},[727],{"type":337},{"text":729,"type":332}," — product ID being adjusted",{"type":395,"content":731},[732,742,750],{"type":426,"attrs":733,"content":734},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[735],{"type":327,"attrs":736,"content":737},{"textAlign":59},[738],{"text":739,"type":332,"marks":740},"cart-coupon-add",[741],{"type":337},{"type":426,"attrs":743,"content":744},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[745],{"type":327,"attrs":746,"content":747},{"textAlign":59},[748],{"text":749,"type":332},"When a coupon or gift card is added.",{"type":426,"attrs":751,"content":752},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[753],{"type":327,"attrs":754,"content":755},{"textAlign":59},[756,759],{"text":337,"type":332,"marks":757},[758],{"type":337},{"text":760,"type":332}," — coupon or gift card code being added",{"type":395,"content":762},[763,773,781],{"type":426,"attrs":764,"content":765},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[766],{"type":327,"attrs":767,"content":768},{"textAlign":59},[769],{"text":770,"type":332,"marks":771},"cart-coupon-remove",[772],{"type":337},{"type":426,"attrs":774,"content":775},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[776],{"type":327,"attrs":777,"content":778},{"textAlign":59},[779],{"text":780,"type":332},"When a coupon is removed.",{"type":426,"attrs":782,"content":783},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[784],{"type":327,"attrs":785,"content":786},{"textAlign":59},[787,791],{"text":788,"type":332,"marks":789},"coupon_code_id",[790],{"type":337},{"text":792,"type":332}," — coupon code ID being removed",{"type":395,"content":794},[795,805,813],{"type":426,"attrs":796,"content":797},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[798],{"type":327,"attrs":799,"content":800},{"textAlign":59},[801],{"text":802,"type":332,"marks":803},"cart-gift-card-remove",[804],{"type":337},{"type":426,"attrs":806,"content":807},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[808],{"type":327,"attrs":809,"content":810},{"textAlign":59},[811],{"text":812,"type":332},"When a gift card is removed.",{"type":426,"attrs":814,"content":815},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[816],{"type":327,"attrs":817,"content":818},{"textAlign":59},[819,823],{"text":820,"type":332,"marks":821},"gift_card_code_id",[822],{"type":337},{"text":824,"type":332}," — gift card code ID being removed",{"type":395,"content":826},[827,837,850],{"type":426,"attrs":828,"content":829},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[830],{"type":327,"attrs":831,"content":832},{"textAlign":59},[833],{"text":834,"type":332,"marks":835},"cart-update",[836],{"type":337},{"type":426,"attrs":838,"content":839},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[840],{"type":327,"attrs":841,"content":842},{"textAlign":59},[843,845,849],{"text":844,"type":332},"When the cart is updated, e.g. rendering Twig templates or setting ",{"text":846,"type":332,"marks":847},"FC.json",[848],{"type":337},{"text":379,"type":332},{"type":426,"attrs":851,"content":852},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[853],{"type":327,"attrs":854,"content":855},{"textAlign":59},[856],{"text":562,"type":332},{"type":395,"content":858},[859,869,877],{"type":426,"attrs":860,"content":861},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[862],{"type":327,"attrs":863,"content":864},{"textAlign":59},[865],{"text":866,"type":332,"marks":867},"cart-shipping-options-update",[868],{"type":337},{"type":426,"attrs":870,"content":871},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[872],{"type":327,"attrs":873,"content":874},{"textAlign":59},[875],{"text":876,"type":332},"When shipping options are updated.",{"type":426,"attrs":878,"content":879},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[880],{"type":327,"attrs":881,"content":882},{"textAlign":59},[883,887,889,893,895,899,901,905],{"text":884,"type":332,"marks":885},"address",[886],{"type":337},{"text":888,"type":332}," — JSON object of the address in use (e.g. ",{"text":890,"type":332,"marks":891},"FC.json.shipping_address",[892],{"type":337},{"text":894,"type":332},"); ",{"text":896,"type":332,"marks":897},"fields",[898],{"type":337},{"text":900,"type":332}," — JSON object of changed fields (e.g. ",{"text":902,"type":332,"marks":903},"{\"shipping_city\": \"New York\"}",[904],{"type":337},{"text":906,"type":332},")",{"type":341,"attrs":908,"content":909},{"level":387,"textAlign":59},[910],{"text":911,"type":332},"Checkout events",{"type":392,"content":913},[914,937,964,991,1018,1055,1093,1127,1160],{"type":395,"content":915},[916,923,930],{"type":398,"attrs":917,"content":918},{"colspan":400,"rowspan":400,"colwidth":59},[919],{"type":327,"attrs":920,"content":921},{"textAlign":59},[922],{"text":406,"type":332},{"type":398,"attrs":924,"content":925},{"colspan":400,"rowspan":400,"colwidth":59},[926],{"type":327,"attrs":927,"content":928},{"textAlign":59},[929],{"text":414,"type":332},{"type":398,"attrs":931,"content":932},{"colspan":400,"rowspan":400,"colwidth":59},[933],{"type":327,"attrs":934,"content":935},{"textAlign":59},[936],{"text":422,"type":332},{"type":395,"content":938},[939,949,957],{"type":426,"attrs":940,"content":941},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[942],{"type":327,"attrs":943,"content":944},{"textAlign":59},[945],{"text":946,"type":332,"marks":947},"checkout-submit",[948],{"type":337},{"type":426,"attrs":950,"content":951},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[952],{"type":327,"attrs":953,"content":954},{"textAlign":59},[955],{"text":956,"type":332},"When the checkout is submitted.",{"type":426,"attrs":958,"content":959},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[960],{"type":327,"attrs":961,"content":962},{"textAlign":59},[963],{"text":562,"type":332},{"type":395,"content":965},[966,976,984],{"type":426,"attrs":967,"content":968},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[969],{"type":327,"attrs":970,"content":971},{"textAlign":59},[972],{"text":973,"type":332,"marks":974},"checkout-submit-enable",[975],{"type":337},{"type":426,"attrs":977,"content":978},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[979],{"type":327,"attrs":980,"content":981},{"textAlign":59},[982],{"text":983,"type":332},"When the checkout submit button is re-enabled after a stopped validation attempt.",{"type":426,"attrs":985,"content":986},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[987],{"type":327,"attrs":988,"content":989},{"textAlign":59},[990],{"text":562,"type":332},{"type":395,"content":992},[993,1003,1011],{"type":426,"attrs":994,"content":995},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[996],{"type":327,"attrs":997,"content":998},{"textAlign":59},[999],{"text":1000,"type":332,"marks":1001},"checkout-submit-disable",[1002],{"type":337},{"type":426,"attrs":1004,"content":1005},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[1006],{"type":327,"attrs":1007,"content":1008},{"textAlign":59},[1009],{"text":1010,"type":332},"When the checkout submit button is clicked, disabling it and triggering validation.",{"type":426,"attrs":1012,"content":1013},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[1014],{"type":327,"attrs":1015,"content":1016},{"textAlign":59},[1017],{"text":562,"type":332},{"type":395,"content":1019},[1020,1030,1038],{"type":426,"attrs":1021,"content":1022},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[1023],{"type":327,"attrs":1024,"content":1025},{"textAlign":59},[1026],{"text":1027,"type":332,"marks":1028},"checkout-shipping-options-update",[1029],{"type":337},{"type":426,"attrs":1031,"content":1032},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[1033],{"type":327,"attrs":1034,"content":1035},{"textAlign":59},[1036],{"text":1037,"type":332},"When shipping options are updated on the checkout.",{"type":426,"attrs":1039,"content":1040},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[1041],{"type":327,"attrs":1042,"content":1043},{"textAlign":59},[1044,1047,1049,1053],{"text":884,"type":332,"marks":1045},[1046],{"type":337},{"text":1048,"type":332}," — JSON object of the address in use; ",{"text":1050,"type":332,"marks":1051},"custom_fields",[1052],{"type":337},{"text":1054,"type":332}," — JSON object of custom fields included with shipping rate calculations",{"type":395,"content":1056},[1057,1067,1075],{"type":426,"attrs":1058,"content":1059},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[1060],{"type":327,"attrs":1061,"content":1062},{"textAlign":59},[1063],{"text":1064,"type":332,"marks":1065},"express-checkout-select",[1066],{"type":337},{"type":426,"attrs":1068,"content":1069},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[1070],{"type":327,"attrs":1071,"content":1072},{"textAlign":59},[1073],{"text":1074,"type":332},"When a customer initiates an express checkout option.",{"type":426,"attrs":1076,"content":1077},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[1078],{"type":327,"attrs":1079,"content":1080},{"textAlign":59},[1081,1085,1087,1091],{"text":1082,"type":332,"marks":1083},"gateway",[1084],{"type":337},{"text":1086,"type":332}," — payment gateway code; ",{"text":1088,"type":332,"marks":1089},"payment_type",[1090],{"type":337},{"text":1092,"type":332}," — express payment type code selected",{"type":395,"content":1094},[1095,1105,1113],{"type":426,"attrs":1096,"content":1097},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[1098],{"type":327,"attrs":1099,"content":1100},{"textAlign":59},[1101],{"text":1102,"type":332,"marks":1103},"express-checkout-confirm",[1104],{"type":337},{"type":426,"attrs":1106,"content":1107},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[1108],{"type":327,"attrs":1109,"content":1110},{"textAlign":59},[1111],{"text":1112,"type":332},"When a customer completes express checkout authentication.",{"type":426,"attrs":1114,"content":1115},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[1116],{"type":327,"attrs":1117,"content":1118},{"textAlign":59},[1119,1122,1124],{"text":1082,"type":332,"marks":1120},[1121],{"type":337},{"text":1123,"type":332},"; ",{"text":1088,"type":332,"marks":1125},[1126],{"type":337},{"type":395,"content":1128},[1129,1139,1147],{"type":426,"attrs":1130,"content":1131},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[1132],{"type":327,"attrs":1133,"content":1134},{"textAlign":59},[1135],{"text":1136,"type":332,"marks":1137},"express-checkout-cancel",[1138],{"type":337},{"type":426,"attrs":1140,"content":1141},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[1142],{"type":327,"attrs":1143,"content":1144},{"textAlign":59},[1145],{"text":1146,"type":332},"When a customer cancels an express checkout option.",{"type":426,"attrs":1148,"content":1149},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[1150],{"type":327,"attrs":1151,"content":1152},{"textAlign":59},[1153,1156,1157],{"text":1082,"type":332,"marks":1154},[1155],{"type":337},{"text":1123,"type":332},{"text":1088,"type":332,"marks":1158},[1159],{"type":337},{"type":395,"content":1161},[1162,1172,1180],{"type":426,"attrs":1163,"content":1164},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[1165],{"type":327,"attrs":1166,"content":1167},{"textAlign":59},[1168],{"text":1169,"type":332,"marks":1170},"express-checkout-error",[1171],{"type":337},{"type":426,"attrs":1173,"content":1174},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[1175],{"type":327,"attrs":1176,"content":1177},{"textAlign":59},[1178],{"text":1179,"type":332},"When an express checkout option errors.",{"type":426,"attrs":1181,"content":1182},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[1183],{"type":327,"attrs":1184,"content":1185},{"textAlign":59},[1186,1189,1190,1193,1194,1198],{"text":1082,"type":332,"marks":1187},[1188],{"type":337},{"text":1123,"type":332},{"text":1088,"type":332,"marks":1191},[1192],{"type":337},{"text":1123,"type":332},{"text":1195,"type":332,"marks":1196},"reason",[1197],{"type":337},{"text":1199,"type":332}," — the failure reason, if available",{"type":341,"attrs":1201,"content":1202},{"level":387,"textAlign":59},[1203],{"text":1204,"type":332},"Customer events",{"type":327,"attrs":1206,"content":1207},{"textAlign":59},[1208],{"text":1209,"type":332},"Fired on both the cart and the checkout.",{"type":392,"content":1211},[1212,1235,1267,1294,1321,1356],{"type":395,"content":1213},[1214,1221,1228],{"type":398,"attrs":1215,"content":1216},{"colspan":400,"rowspan":400,"colwidth":59},[1217],{"type":327,"attrs":1218,"content":1219},{"textAlign":59},[1220],{"text":406,"type":332},{"type":398,"attrs":1222,"content":1223},{"colspan":400,"rowspan":400,"colwidth":59},[1224],{"type":327,"attrs":1225,"content":1226},{"textAlign":59},[1227],{"text":414,"type":332},{"type":398,"attrs":1229,"content":1230},{"colspan":400,"rowspan":400,"colwidth":59},[1231],{"type":327,"attrs":1232,"content":1233},{"textAlign":59},[1234],{"text":422,"type":332},{"type":395,"content":1236},[1237,1247,1255],{"type":426,"attrs":1238,"content":1239},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[1240],{"type":327,"attrs":1241,"content":1242},{"textAlign":59},[1243],{"text":1244,"type":332,"marks":1245},"customer-email-update",[1246],{"type":337},{"type":426,"attrs":1248,"content":1249},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[1250],{"type":327,"attrs":1251,"content":1252},{"textAlign":59},[1253],{"text":1254,"type":332},"When an entered email address is checked.",{"type":426,"attrs":1256,"content":1257},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[1258],{"type":327,"attrs":1259,"content":1260},{"textAlign":59},[1261,1265],{"text":1262,"type":332,"marks":1263},"customer_email",[1264],{"type":337},{"text":1266,"type":332}," — the email address entered",{"type":395,"content":1268},[1269,1279,1287],{"type":426,"attrs":1270,"content":1271},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[1272],{"type":327,"attrs":1273,"content":1274},{"textAlign":59},[1275],{"text":1276,"type":332,"marks":1277},"customer-login",[1278],{"type":337},{"type":426,"attrs":1280,"content":1281},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[1282],{"type":327,"attrs":1283,"content":1284},{"textAlign":59},[1285],{"text":1286,"type":332},"When a returning customer successfully logs in.",{"type":426,"attrs":1288,"content":1289},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[1290],{"type":327,"attrs":1291,"content":1292},{"textAlign":59},[1293],{"text":562,"type":332},{"type":395,"content":1295},[1296,1306,1314],{"type":426,"attrs":1297,"content":1298},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[1299],{"type":327,"attrs":1300,"content":1301},{"textAlign":59},[1302],{"text":1303,"type":332,"marks":1304},"customer-address-update",[1305],{"type":337},{"type":426,"attrs":1307,"content":1308},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[1309],{"type":327,"attrs":1310,"content":1311},{"textAlign":59},[1312],{"text":1313,"type":332},"When a complete address is entered for an address type (e.g. billing\u002Fshipping).",{"type":426,"attrs":1315,"content":1316},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[1317],{"type":327,"attrs":1318,"content":1319},{"textAlign":59},[1320],{"text":562,"type":332},{"type":395,"content":1322},[1323,1333,1341],{"type":426,"attrs":1324,"content":1325},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[1326],{"type":327,"attrs":1327,"content":1328},{"textAlign":59},[1329],{"text":1330,"type":332,"marks":1331},"customer-address-change",[1332],{"type":337},{"type":426,"attrs":1334,"content":1335},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[1336],{"type":327,"attrs":1337,"content":1338},{"textAlign":59},[1339],{"text":1340,"type":332},"When any customer address field is changed.",{"type":426,"attrs":1342,"content":1343},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[1344],{"type":327,"attrs":1345,"content":1346},{"textAlign":59},[1347,1350,1351,1354],{"text":884,"type":332,"marks":1348},[1349],{"type":337},{"text":1048,"type":332},{"text":896,"type":332,"marks":1352},[1353],{"type":337},{"text":1355,"type":332}," — JSON object of changed fields",{"type":395,"content":1357},[1358,1368,1376],{"type":426,"attrs":1359,"content":1360},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[1361],{"type":327,"attrs":1362,"content":1363},{"textAlign":59},[1364],{"text":1365,"type":332,"marks":1366},"customer-shipping-option-select",[1367],{"type":337},{"type":426,"attrs":1369,"content":1370},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[1371],{"type":327,"attrs":1372,"content":1373},{"textAlign":59},[1374],{"text":1375,"type":332},"When a customer selects a shipping rate.",{"type":426,"attrs":1377,"content":1378},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[1379],{"type":327,"attrs":1380,"content":1381},{"textAlign":59},[1382,1384,1387],{"text":1383,"type":332},"Parameters set to the contents of the address object (e.g. ",{"text":890,"type":332,"marks":1385},[1386],{"type":337},{"text":906,"type":332},{"type":341,"attrs":1389,"content":1390},{"level":387,"textAlign":59},[1391],{"text":1392,"type":332},"Analytics events",{"type":327,"attrs":1394,"content":1395},{"textAlign":59},[1396],{"text":1397,"type":332},"Fired on the cart, checkout, and receipt.",{"type":392,"content":1399},[1400,1423],{"type":395,"content":1401},[1402,1409,1416],{"type":398,"attrs":1403,"content":1404},{"colspan":400,"rowspan":400,"colwidth":59},[1405],{"type":327,"attrs":1406,"content":1407},{"textAlign":59},[1408],{"text":406,"type":332},{"type":398,"attrs":1410,"content":1411},{"colspan":400,"rowspan":400,"colwidth":59},[1412],{"type":327,"attrs":1413,"content":1414},{"textAlign":59},[1415],{"text":414,"type":332},{"type":398,"attrs":1417,"content":1418},{"colspan":400,"rowspan":400,"colwidth":59},[1419],{"type":327,"attrs":1420,"content":1421},{"textAlign":59},[1422],{"text":422,"type":332},{"type":395,"content":1424},[1425,1435,1443],{"type":426,"attrs":1426,"content":1427},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[1428],{"type":327,"attrs":1429,"content":1430},{"textAlign":59},[1431],{"text":1432,"type":332,"marks":1433},"analytics-gtm-datalayer",[1434],{"type":337},{"type":426,"attrs":1436,"content":1437},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[1438],{"type":327,"attrs":1439,"content":1440},{"textAlign":59},[1441],{"text":1442,"type":332},"Fires before adding an entry to the dataLayer for GTM integrations, allowing you to modify the data added for custom tracking.",{"type":426,"attrs":1444,"content":1445},{"colspan":400,"rowspan":400,"colwidth":59,"backgroundColor":59},[1446],{"type":327,"attrs":1447,"content":1448},{"textAlign":59},[1449,1453,1455,1459,1461,1465,1467,1471],{"text":1450,"type":332,"marks":1451},"event_data",[1452],{"type":337},{"text":1454,"type":332}," — JSON object of the data being added, including ",{"text":1456,"type":332,"marks":1457},"event",[1458],{"type":337},{"text":1460,"type":332}," (the event being tracked), ",{"text":1462,"type":332,"marks":1463},"ecommerce",[1464],{"type":337},{"text":1466,"type":332}," (event data), and ",{"text":1468,"type":332,"marks":1469},"virtual_page_location",[1470],{"type":337},{"text":1472,"type":332}," (URL tracked as the virtual page location)",{"type":341,"attrs":1474,"content":1475},{"level":343,"textAlign":59},[1476],{"text":1477,"type":332},"Usage examples",{"type":341,"attrs":1479,"content":1480},{"level":387,"textAlign":59},[1481],{"text":1482,"type":332},"Pausing and canceling the event queue",{"type":327,"attrs":1484,"content":1485},{"textAlign":59},[1486,1488,1492],{"text":1487,"type":332},"Synchronous handlers can return ",{"text":1489,"type":332,"marks":1490},"false",[1491],{"type":337},{"text":1493,"type":332}," to stop processing:",{"type":348,"attrs":1495,"content":1496},{"class":59},[1497],{"text":1498,"type":332},"FC.client.on('cart-item-remove', function (params) {\n  if (params.itemPrice == 0) {\n    alert('You cannot remove free products from your cart');\n    return false;\n  }\n});\n",{"type":327,"attrs":1500,"content":1501},{"textAlign":59},[1502,1504,1508,1510,1514,1516,1520],{"text":1503,"type":332},"Declare a handler with a second parameter (conventionally ",{"text":1505,"type":332,"marks":1506},"next",[1507],{"type":337},{"text":1509,"type":332},") to make it asynchronous. The event queue pauses until ",{"text":1511,"type":332,"marks":1512},"next()",[1513],{"type":337},{"text":1515,"type":332}," is called to continue, or ",{"text":1517,"type":332,"marks":1518},"next(false)",[1519],{"type":337},{"text":1521,"type":332}," to stop it. A returned value from an asynchronous handler is ignored:",{"type":348,"attrs":1523,"content":1524},{"class":59},[1525],{"text":1526,"type":332},"FC.client.on('cart-coupon-add', function (params, next) {\n  $.ajax({\n    type: 'get',\n    url: 'http:\u002F\u002Fapi.example.com\u002Fcheck-coupon-availability',\n    dataType: 'jsonp',\n    data: { couponCode: params.couponCode }\n  }).done(function (data) {\n    if (data.ok) {\n      next();\n    } else {\n      alert('Sorry, your coupon is not available today.');\n      next(false);\n    }\n  });\n}).on('cart-coupon-add.done', function (params) {\n  alert('Coupon ' + params.couponCode + ' has been added');\n});\n",{"type":341,"attrs":1528,"content":1529},{"level":387,"textAlign":59},[1530],{"text":1531,"type":332},"Getting an event",{"type":348,"attrs":1533,"content":1534},{"class":59},[1535],{"text":1536,"type":332},"var event = FC.client.event('cart-item-remove');\n",{"type":341,"attrs":1538,"content":1539},{"level":387,"textAlign":59},[1540],{"text":1541,"type":332},"Overriding the default action",{"type":348,"attrs":1543,"content":1544},{"class":59},[1545],{"text":1546,"type":332},"FC.client.event('cart-item-remove').override(newDefaultHandler);\n",{"type":341,"attrs":1548,"content":1549},{"level":387,"textAlign":59},[1550],{"text":1551,"type":332},"Creating and triggering a custom event",{"type":348,"attrs":1553,"content":1554},{"class":59},[1555],{"text":1556,"type":332},"FC.client.wrap('your-own-event', function (params) {\n  \u002F\u002F body\n});\nFC.client.event('your-own-event').trigger(params);\n",{"type":341,"attrs":1558,"content":1559},{"level":387,"textAlign":59},[1560],{"text":1561,"type":332},"Validating a checkout field",{"type":327,"attrs":1563,"content":1564},{"textAlign":59},[1565,1567,1571,1573,1577],{"text":1566,"type":332},"This example requires a value on a ",{"text":1568,"type":332,"marks":1569},"date",[1570],{"type":337},{"text":1572,"type":332}," input inside a form with ",{"text":1574,"type":332,"marks":1575},"id=\"my-specific-form\"",[1576],{"type":337},{"text":1578,"type":332}," before allowing the checkout to submit:",{"type":348,"attrs":1580,"content":1581},{"class":59},[1582],{"text":1583,"type":332},"var FC = FC || {};\nFC.onLoad = function () {\n  FC.client.on('cart-submit', function (params, next) {\n    $element = $(params.element);\n    if (\n      $element.attr('id') == 'my-specific-form'\n      && $element.find('[name=\"date\"]').length > 0\n      && !$element.find('[name=\"date\"]').val()\n    ) {\n      alert('Date must be filled out');\n    } else {\n      next();\n    }\n  });\n};\n",{"type":341,"attrs":1585,"content":1586},{"level":387,"textAlign":59},[1587],{"text":1588,"type":332},"Preventing an add-to-cart with custom criteria",{"type":327,"attrs":1590,"content":1591},{"textAlign":59},[1592,1594,1598,1600,1604],{"text":1593,"type":332},"This example prevents adding a product from category ",{"text":1595,"type":332,"marks":1596},"Product2",[1597],{"type":337},{"text":1599,"type":332}," if the cart already contains a product from category ",{"text":1601,"type":332,"marks":1602},"Product1",[1603],{"type":337},{"text":1605,"type":332},":",{"type":348,"attrs":1607,"content":1608},{"class":59},[1609],{"text":1610,"type":332},"FC.client.on('cart-submit', function (params, next) {\n  var product1_exists = false;\n  if (!jQuery.isEmptyObject(FC.json.items)) {\n    jQuery.each(FC.json.items, function (i, item) {\n      if (item.category == 'Product1') {\n        product1_exists = true;\n      }\n    });\n  }\n  if (params.data.category == 'Product2' && product1_exists) {\n    next(false);\n  } else {\n    next(true);\n  }\n});\n",{"type":341,"attrs":1612,"content":1613},{"level":343,"textAlign":59},[1614],{"text":1615,"type":332},"Notes",{"type":1617,"content":1618},"bullet_list",[1619,1648,1655],{"type":1620,"content":1621},"list_item",[1622],{"type":327,"attrs":1623,"content":1624},{"textAlign":59},[1625,1627,1631,1633,1640,1642,1646],{"text":1626,"type":332},"All events are accessed through ",{"text":1628,"type":332,"marks":1629},"FC.client",[1630],{"type":337},{"text":1632,"type":332},", which must be ready before binding — see ",{"text":1634,"type":332,"marks":1635},"JavaScript Overview",[1636],{"type":1637,"attrs":1638},"link",{"href":1639,"uuid":59,"anchor":59,"target":59,"linktype":31},"https:\u002F\u002Ffoxy.io\u002Fhelp\u002Farticles\u002Fjavascript-overview",{"text":1641,"type":332}," for using ",{"text":1643,"type":332,"marks":1644},"FC.onLoad",[1645],{"type":337},{"text":1647,"type":332}," to ensure this.",{"type":1620,"content":1649},[1650],{"type":327,"attrs":1651,"content":1652},{"textAlign":59},[1653],{"text":1654,"type":332},"Not every event has parameters — where none are listed above, the handler receives no arguments.",{"type":1620,"content":1656},[1657],{"type":327,"attrs":1658,"content":1659},{"textAlign":59},[1660],{"text":1661,"type":332},"If you find an event you need that isn’t listed here, contact Foxy support.",{"id":59,"alt":59,"name":13,"focus":59,"title":59,"source":59,"filename":13,"copyright":59,"fieldtype":81,"meta_data":1663},{},"The full list of Foxy JavaScript events available on the cart, checkout, and receipt, and how to bind, override, and trigger them.","3ec5e2da-c8cb-4271-ab65-8ee88cf158fb",[],"javascript-events-reference","help\u002Farticles\u002Fjavascript-events-reference",-4040,[],2659,"a6682575-6a7f-48cf-8089-51f70b54e528",[],{"html":1675,"sections":1676,"segments":1711},"\u003Cp>Foxy’s JavaScript fires events for nearly everything that happens on the cart, checkout, and receipt. Bind to any of these with \u003Ccode class=\"badge bg-soft-danger text-danger\">FC.client.on()\u003C\u002Fcode> to hook in your own custom behavior.\u003C\u002Fp>\u003Csection id=\"binding-to-an-event\" data-title=\"Binding to an event\" data-title-node=\"H2\">\u003Chr class=\"my-8\" style=\"margin-left: -48px; margin-right: -40vw\">\u003Ch2 data-anchor-id=\"binding-to-an-event\">Binding to an event\u003C\u002Fh2>\u003Cdiv class=\"position-relative w-100 overflow-hidden rounded-2\" data-code-block>\u003Cdiv class=\"d-flex justify-content-end border-bottom\" style=\"background:#2b2c3b;\">\u003Cbutton type=\"button\" class=\"btn btn-link btn-sm text-light\" title=\"Copy\" data-code-button>\u003Cspan data-code-default style=\"\">\u003Ci class=\"fal fa-copy me-2\">\u003C\u002Fi> Copy \u003C\u002Fspan>\u003Cspan class=\"text-success\" data-code-success style=\"display:none;\">\u003Ci class=\"fal fa-check ms-2\">\u003C\u002Fi> Copied \u003C\u002Fspan>\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cdiv class=\"small\">\u003Cpre class=\"hljs p-2\" data-code-content>FC.client.on(&#x27;cart-submit&#x27;, function (params, next) {\n  \u002F\u002F your code here\n});\n\u003C\u002Fpre>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cp>Bind and unbind calls can be chained:\u003C\u002Fp>\u003Cdiv class=\"position-relative w-100 overflow-hidden rounded-2\" data-code-block>\u003Cdiv class=\"d-flex justify-content-end border-bottom\" style=\"background:#2b2c3b;\">\u003Cbutton type=\"button\" class=\"btn btn-link btn-sm text-light\" title=\"Copy\" data-code-button>\u003Cspan data-code-default style=\"\">\u003Ci class=\"fal fa-copy me-2\">\u003C\u002Fi> Copy \u003C\u002Fspan>\u003Cspan class=\"text-success\" data-code-success style=\"display:none;\">\u003Ci class=\"fal fa-check ms-2\">\u003C\u002Fi> Copied \u003C\u002Fspan>\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cdiv class=\"small\">\u003Cpre class=\"hljs p-2\" data-code-content>FC.client\n  .on(&#x27;cart-item-remove&#x27;, cartItemRemoveHandler)\n  .on(&#x27;cart-item-remove.done&#x27;, cartItemRemoveDoneHandler)\n  .on(&#x27;cart-submit&#x27;, cartSubmitHandler)\n  .on(&#x27;cart-submit.done&#x27;, cartSubmitDoneHandler);\n\nFC.client\n  .off(&#x27;cart-item-remove&#x27;, cartItemRemoveHandler)\n  .off(&#x27;cart-submit&#x27;, cartSubmitHandler);\n\u003C\u002Fpre>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cp>Every event listed below also fires a corresponding \u003Ccode class=\"badge bg-soft-danger text-danger\">.done\u003C\u002Fcode> event once the action completes, for example \u003Ccode class=\"badge bg-soft-danger text-danger\">cart-item-remove.done\u003C\u002Fcode>.\u003C\u002Fp>\u003C\u002Fsection>\u003Csection id=\"available-events\" data-title=\"Available events\" data-title-node=\"H2\">\u003Chr class=\"my-8\" style=\"margin-left: -48px; margin-right: -40vw\">\u003Ch2 data-anchor-id=\"available-events\">Available events\u003C\u002Fh2>\u003C\u002Fsection>\u003Csection id=\"template-events\" data-title=\"Template events\" data-title-node=\"H3\">\u003Ch3 data-anchor-id=\"template-events\">Template events\u003C\u002Fh3>\u003Cdiv class=\"table-responsive w-100\">\u003Ctable class=\"table table-lg table-bordered my-5\">\u003Cthead class=\"thead-light\">\u003Ctr>\u003Cth>\u003Cp>Event\u003C\u002Fp>\u003C\u002Fth>\u003Cth>\u003Cp>Description\u003C\u002Fp>\u003C\u002Fth>\u003Cth>\u003Cp>Params\u003C\u002Fp>\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">render.done\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>Fires after a template block is updated.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">selector\u003C\u002Fcode> — HTML selector for the block being rendered; \u003Ccode class=\"badge bg-soft-danger text-danger\">block_id\u003C\u002Fcode> — name of the block being rendered\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\u003C\u002Fsection>\u003Csection id=\"sidecart-events\" data-title=\"Sidecart events\" data-title-node=\"H3\">\u003Ch3 data-anchor-id=\"sidecart-events\">Sidecart events\u003C\u002Fh3>\u003Cdiv class=\"table-responsive w-100\">\u003Ctable class=\"table table-lg table-bordered my-5\">\u003Cthead class=\"thead-light\">\u003Ctr>\u003Cth>\u003Cp>Event\u003C\u002Fp>\u003C\u002Fth>\u003Cth>\u003Cp>Description\u003C\u002Fp>\u003C\u002Fth>\u003Cth>\u003Cp>Params\u003C\u002Fp>\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">sidecart-show\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>When the sidecart is displayed.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">element\u003C\u002Fcode> — HTML element that triggered the add to cart; \u003Ccode class=\"badge bg-soft-danger text-danger\">data\u003C\u002Fcode> — parameters in the add to cart; \u003Ccode class=\"badge bg-soft-danger text-danger\">url\u003C\u002Fcode> — URL version of the add to cart\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">sidecart-hide\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>When the sidecart is hidden.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>—\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">sidecart-detach\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>After the sidecart is hidden and detached from the DOM.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>—\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\u003C\u002Fsection>\u003Csection id=\"cart-events\" data-title=\"Cart events\" data-title-node=\"H3\">\u003Ch3 data-anchor-id=\"cart-events\">Cart events\u003C\u002Fh3>\u003Cdiv class=\"table-responsive w-100\">\u003Ctable class=\"table table-lg table-bordered my-5\">\u003Cthead class=\"thead-light\">\u003Ctr>\u003Cth>\u003Cp>Event\u003C\u002Fp>\u003C\u002Fth>\u003Cth>\u003Cp>Description\u003C\u002Fp>\u003C\u002Fth>\u003Cth>\u003Cp>Params\u003C\u002Fp>\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">cart-submit\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>When the cart is loaded — as an add to cart, view cart, empty cart request, etc.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">element\u003C\u002Fcode> — HTML element that triggered the request; \u003Ccode class=\"badge bg-soft-danger text-danger\">data\u003C\u002Fcode> — parameters in the cart request; \u003Ccode class=\"badge bg-soft-danger text-danger\">url\u003C\u002Fcode> — URL version of the request\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">cart-item-quantity-update\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>When a quantity is changed in the cart.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">id\u003C\u002Fcode> — product ID being adjusted; \u003Ccode class=\"badge bg-soft-danger text-danger\">quantity\u003C\u002Fcode> — new quantity amount\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">cart-item-remove\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>When a product is removed from the cart.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">id\u003C\u002Fcode> — product ID being adjusted\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">cart-coupon-add\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>When a coupon or gift card is added.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">code\u003C\u002Fcode> — coupon or gift card code being added\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">cart-coupon-remove\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>When a coupon is removed.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">coupon_code_id\u003C\u002Fcode> — coupon code ID being removed\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">cart-gift-card-remove\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>When a gift card is removed.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">gift_card_code_id\u003C\u002Fcode> — gift card code ID being removed\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">cart-update\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>When the cart is updated, e.g. rendering Twig templates or setting \u003Ccode class=\"badge bg-soft-danger text-danger\">FC.json\u003C\u002Fcode>.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>—\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">cart-shipping-options-update\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>When shipping options are updated.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">address\u003C\u002Fcode> — JSON object of the address in use (e.g. \u003Ccode class=\"badge bg-soft-danger text-danger\">FC.json.shipping_address\u003C\u002Fcode>); \u003Ccode class=\"badge bg-soft-danger text-danger\">fields\u003C\u002Fcode> — JSON object of changed fields (e.g. \u003Ccode class=\"badge bg-soft-danger text-danger\">{&quot;shipping_city&quot;: &quot;New York&quot;}\u003C\u002Fcode>)\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\u003C\u002Fsection>\u003Csection id=\"checkout-events\" data-title=\"Checkout events\" data-title-node=\"H3\">\u003Ch3 data-anchor-id=\"checkout-events\">Checkout events\u003C\u002Fh3>\u003Cdiv class=\"table-responsive w-100\">\u003Ctable class=\"table table-lg table-bordered my-5\">\u003Cthead class=\"thead-light\">\u003Ctr>\u003Cth>\u003Cp>Event\u003C\u002Fp>\u003C\u002Fth>\u003Cth>\u003Cp>Description\u003C\u002Fp>\u003C\u002Fth>\u003Cth>\u003Cp>Params\u003C\u002Fp>\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">checkout-submit\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>When the checkout is submitted.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>—\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">checkout-submit-enable\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>When the checkout submit button is re-enabled after a stopped validation attempt.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>—\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">checkout-submit-disable\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>When the checkout submit button is clicked, disabling it and triggering validation.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>—\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">checkout-shipping-options-update\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>When shipping options are updated on the checkout.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">address\u003C\u002Fcode> — JSON object of the address in use; \u003Ccode class=\"badge bg-soft-danger text-danger\">custom_fields\u003C\u002Fcode> — JSON object of custom fields included with shipping rate calculations\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">express-checkout-select\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>When a customer initiates an express checkout option.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">gateway\u003C\u002Fcode> — payment gateway code; \u003Ccode class=\"badge bg-soft-danger text-danger\">payment_type\u003C\u002Fcode> — express payment type code selected\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">express-checkout-confirm\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>When a customer completes express checkout authentication.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">gateway\u003C\u002Fcode>; \u003Ccode class=\"badge bg-soft-danger text-danger\">payment_type\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">express-checkout-cancel\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>When a customer cancels an express checkout option.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">gateway\u003C\u002Fcode>; \u003Ccode class=\"badge bg-soft-danger text-danger\">payment_type\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">express-checkout-error\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>When an express checkout option errors.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">gateway\u003C\u002Fcode>; \u003Ccode class=\"badge bg-soft-danger text-danger\">payment_type\u003C\u002Fcode>; \u003Ccode class=\"badge bg-soft-danger text-danger\">reason\u003C\u002Fcode> — the failure reason, if available\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\u003C\u002Fsection>\u003Csection id=\"customer-events\" data-title=\"Customer events\" data-title-node=\"H3\">\u003Ch3 data-anchor-id=\"customer-events\">Customer events\u003C\u002Fh3>\u003Cp>Fired on both the cart and the checkout.\u003C\u002Fp>\u003Cdiv class=\"table-responsive w-100\">\u003Ctable class=\"table table-lg table-bordered my-5\">\u003Cthead class=\"thead-light\">\u003Ctr>\u003Cth>\u003Cp>Event\u003C\u002Fp>\u003C\u002Fth>\u003Cth>\u003Cp>Description\u003C\u002Fp>\u003C\u002Fth>\u003Cth>\u003Cp>Params\u003C\u002Fp>\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">customer-email-update\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>When an entered email address is checked.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">customer_email\u003C\u002Fcode> — the email address entered\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">customer-login\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>When a returning customer successfully logs in.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>—\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">customer-address-update\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>When a complete address is entered for an address type (e.g. billing\u002Fshipping).\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>—\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">customer-address-change\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>When any customer address field is changed.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">address\u003C\u002Fcode> — JSON object of the address in use; \u003Ccode class=\"badge bg-soft-danger text-danger\">fields\u003C\u002Fcode> — JSON object of changed fields\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">customer-shipping-option-select\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>When a customer selects a shipping rate.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>Parameters set to the contents of the address object (e.g. \u003Ccode class=\"badge bg-soft-danger text-danger\">FC.json.shipping_address\u003C\u002Fcode>)\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\u003C\u002Fsection>\u003Csection id=\"analytics-events\" data-title=\"Analytics events\" data-title-node=\"H3\">\u003Ch3 data-anchor-id=\"analytics-events\">Analytics events\u003C\u002Fh3>\u003Cp>Fired on the cart, checkout, and receipt.\u003C\u002Fp>\u003Cdiv class=\"table-responsive w-100\">\u003Ctable class=\"table table-lg table-bordered my-5\">\u003Cthead class=\"thead-light\">\u003Ctr>\u003Cth>\u003Cp>Event\u003C\u002Fp>\u003C\u002Fth>\u003Cth>\u003Cp>Description\u003C\u002Fp>\u003C\u002Fth>\u003Cth>\u003Cp>Params\u003C\u002Fp>\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">analytics-gtm-datalayer\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>Fires before adding an entry to the dataLayer for GTM integrations, allowing you to modify the data added for custom tracking.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">event_data\u003C\u002Fcode> — JSON object of the data being added, including \u003Ccode class=\"badge bg-soft-danger text-danger\">event\u003C\u002Fcode> (the event being tracked), \u003Ccode class=\"badge bg-soft-danger text-danger\">ecommerce\u003C\u002Fcode> (event data), and \u003Ccode class=\"badge bg-soft-danger text-danger\">virtual_page_location\u003C\u002Fcode> (URL tracked as the virtual page location)\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\u003C\u002Fsection>\u003Csection id=\"usage-examples\" data-title=\"Usage examples\" data-title-node=\"H2\">\u003Chr class=\"my-8\" style=\"margin-left: -48px; margin-right: -40vw\">\u003Ch2 data-anchor-id=\"usage-examples\">Usage examples\u003C\u002Fh2>\u003C\u002Fsection>\u003Csection id=\"pausing-and-canceling-the-event-queue\" data-title=\"Pausing and canceling the event queue\" data-title-node=\"H3\">\u003Ch3 data-anchor-id=\"pausing-and-canceling-the-event-queue\">Pausing and canceling the event queue\u003C\u002Fh3>\u003Cp>Synchronous handlers can return \u003Ccode class=\"badge bg-soft-danger text-danger\">false\u003C\u002Fcode> to stop processing:\u003C\u002Fp>\u003Cdiv class=\"position-relative w-100 overflow-hidden rounded-2\" data-code-block>\u003Cdiv class=\"d-flex justify-content-end border-bottom\" style=\"background:#2b2c3b;\">\u003Cbutton type=\"button\" class=\"btn btn-link btn-sm text-light\" title=\"Copy\" data-code-button>\u003Cspan data-code-default style=\"\">\u003Ci class=\"fal fa-copy me-2\">\u003C\u002Fi> Copy \u003C\u002Fspan>\u003Cspan class=\"text-success\" data-code-success style=\"display:none;\">\u003Ci class=\"fal fa-check ms-2\">\u003C\u002Fi> Copied \u003C\u002Fspan>\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cdiv class=\"small\">\u003Cpre class=\"hljs p-2\" data-code-content>FC.client.on(&#x27;cart-item-remove&#x27;, function (params) {\n  if (params.itemPrice == 0) {\n    alert(&#x27;You cannot remove free products from your cart&#x27;);\n    return false;\n  }\n});\n\u003C\u002Fpre>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cp>Declare a handler with a second parameter (conventionally \u003Ccode class=\"badge bg-soft-danger text-danger\">next\u003C\u002Fcode>) to make it asynchronous. The event queue pauses until \u003Ccode class=\"badge bg-soft-danger text-danger\">next()\u003C\u002Fcode> is called to continue, or \u003Ccode class=\"badge bg-soft-danger text-danger\">next(false)\u003C\u002Fcode> to stop it. A returned value from an asynchronous handler is ignored:\u003C\u002Fp>\u003Cdiv class=\"position-relative w-100 overflow-hidden rounded-2\" data-code-block>\u003Cdiv class=\"d-flex justify-content-end border-bottom\" style=\"background:#2b2c3b;\">\u003Cbutton type=\"button\" class=\"btn btn-link btn-sm text-light\" title=\"Copy\" data-code-button>\u003Cspan data-code-default style=\"\">\u003Ci class=\"fal fa-copy me-2\">\u003C\u002Fi> Copy \u003C\u002Fspan>\u003Cspan class=\"text-success\" data-code-success style=\"display:none;\">\u003Ci class=\"fal fa-check ms-2\">\u003C\u002Fi> Copied \u003C\u002Fspan>\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cdiv class=\"small\">\u003Cpre class=\"hljs p-2\" data-code-content>FC.client.on(&#x27;cart-coupon-add&#x27;, function (params, next) {\n  $.ajax({\n    type: &#x27;get&#x27;,\n    url: &#x27;http:\u002F\u002Fapi.example.com\u002Fcheck-coupon-availability&#x27;,\n    dataType: &#x27;jsonp&#x27;,\n    data: { couponCode: params.couponCode }\n  }).done(function (data) {\n    if (data.ok) {\n      next();\n    } else {\n      alert(&#x27;Sorry, your coupon is not available today.&#x27;);\n      next(false);\n    }\n  });\n}).on(&#x27;cart-coupon-add.done&#x27;, function (params) {\n  alert(&#x27;Coupon &#x27; + params.couponCode + &#x27; has been added&#x27;);\n});\n\u003C\u002Fpre>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fsection>\u003Csection id=\"getting-an-event\" data-title=\"Getting an event\" data-title-node=\"H3\">\u003Ch3 data-anchor-id=\"getting-an-event\">Getting an event\u003C\u002Fh3>\u003Cdiv class=\"position-relative w-100 overflow-hidden rounded-2\" data-code-block>\u003Cdiv class=\"d-flex justify-content-end border-bottom\" style=\"background:#2b2c3b;\">\u003Cbutton type=\"button\" class=\"btn btn-link btn-sm text-light\" title=\"Copy\" data-code-button>\u003Cspan data-code-default style=\"\">\u003Ci class=\"fal fa-copy me-2\">\u003C\u002Fi> Copy \u003C\u002Fspan>\u003Cspan class=\"text-success\" data-code-success style=\"display:none;\">\u003Ci class=\"fal fa-check ms-2\">\u003C\u002Fi> Copied \u003C\u002Fspan>\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cdiv class=\"small\">\u003Cpre class=\"hljs p-2\" data-code-content>var event = FC.client.event(&#x27;cart-item-remove&#x27;);\n\u003C\u002Fpre>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fsection>\u003Csection id=\"overriding-the-default-action\" data-title=\"Overriding the default action\" data-title-node=\"H3\">\u003Ch3 data-anchor-id=\"overriding-the-default-action\">Overriding the default action\u003C\u002Fh3>\u003Cdiv class=\"position-relative w-100 overflow-hidden rounded-2\" data-code-block>\u003Cdiv class=\"d-flex justify-content-end border-bottom\" style=\"background:#2b2c3b;\">\u003Cbutton type=\"button\" class=\"btn btn-link btn-sm text-light\" title=\"Copy\" data-code-button>\u003Cspan data-code-default style=\"\">\u003Ci class=\"fal fa-copy me-2\">\u003C\u002Fi> Copy \u003C\u002Fspan>\u003Cspan class=\"text-success\" data-code-success style=\"display:none;\">\u003Ci class=\"fal fa-check ms-2\">\u003C\u002Fi> Copied \u003C\u002Fspan>\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cdiv class=\"small\">\u003Cpre class=\"hljs p-2\" data-code-content>FC.client.event(&#x27;cart-item-remove&#x27;).override(newDefaultHandler);\n\u003C\u002Fpre>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fsection>\u003Csection id=\"creating-and-triggering-a-custom-event\" data-title=\"Creating and triggering a custom event\" data-title-node=\"H3\">\u003Ch3 data-anchor-id=\"creating-and-triggering-a-custom-event\">Creating and triggering a custom event\u003C\u002Fh3>\u003Cdiv class=\"position-relative w-100 overflow-hidden rounded-2\" data-code-block>\u003Cdiv class=\"d-flex justify-content-end border-bottom\" style=\"background:#2b2c3b;\">\u003Cbutton type=\"button\" class=\"btn btn-link btn-sm text-light\" title=\"Copy\" data-code-button>\u003Cspan data-code-default style=\"\">\u003Ci class=\"fal fa-copy me-2\">\u003C\u002Fi> Copy \u003C\u002Fspan>\u003Cspan class=\"text-success\" data-code-success style=\"display:none;\">\u003Ci class=\"fal fa-check ms-2\">\u003C\u002Fi> Copied \u003C\u002Fspan>\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cdiv class=\"small\">\u003Cpre class=\"hljs p-2\" data-code-content>FC.client.wrap(&#x27;your-own-event&#x27;, function (params) {\n  \u002F\u002F body\n});\nFC.client.event(&#x27;your-own-event&#x27;).trigger(params);\n\u003C\u002Fpre>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fsection>\u003Csection id=\"validating-a-checkout-field\" data-title=\"Validating a checkout field\" data-title-node=\"H3\">\u003Ch3 data-anchor-id=\"validating-a-checkout-field\">Validating a checkout field\u003C\u002Fh3>\u003Cp>This example requires a value on a \u003Ccode class=\"badge bg-soft-danger text-danger\">date\u003C\u002Fcode> input inside a form with \u003Ccode class=\"badge bg-soft-danger text-danger\">id=&quot;my-specific-form&quot;\u003C\u002Fcode> before allowing the checkout to submit:\u003C\u002Fp>\u003Cdiv class=\"position-relative w-100 overflow-hidden rounded-2\" data-code-block>\u003Cdiv class=\"d-flex justify-content-end border-bottom\" style=\"background:#2b2c3b;\">\u003Cbutton type=\"button\" class=\"btn btn-link btn-sm text-light\" title=\"Copy\" data-code-button>\u003Cspan data-code-default style=\"\">\u003Ci class=\"fal fa-copy me-2\">\u003C\u002Fi> Copy \u003C\u002Fspan>\u003Cspan class=\"text-success\" data-code-success style=\"display:none;\">\u003Ci class=\"fal fa-check ms-2\">\u003C\u002Fi> Copied \u003C\u002Fspan>\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cdiv class=\"small\">\u003Cpre class=\"hljs p-2\" data-code-content>var FC = FC || {};\nFC.onLoad = function () {\n  FC.client.on(&#x27;cart-submit&#x27;, function (params, next) {\n    $element = $(params.element);\n    if (\n      $element.attr(&#x27;id&#x27;) == &#x27;my-specific-form&#x27;\n      &amp;&amp; $element.find(&#x27;[name=&quot;date&quot;]&#x27;).length &gt; 0\n      &amp;&amp; !$element.find(&#x27;[name=&quot;date&quot;]&#x27;).val()\n    ) {\n      alert(&#x27;Date must be filled out&#x27;);\n    } else {\n      next();\n    }\n  });\n};\n\u003C\u002Fpre>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fsection>\u003Csection id=\"preventing-an-add-to-cart-with-custom-criteria\" data-title=\"Preventing an add-to-cart with custom criteria\" data-title-node=\"H3\">\u003Ch3 data-anchor-id=\"preventing-an-add-to-cart-with-custom-criteria\">Preventing an add-to-cart with custom criteria\u003C\u002Fh3>\u003Cp>This example prevents adding a product from category \u003Ccode class=\"badge bg-soft-danger text-danger\">Product2\u003C\u002Fcode> if the cart already contains a product from category \u003Ccode class=\"badge bg-soft-danger text-danger\">Product1\u003C\u002Fcode>:\u003C\u002Fp>\u003Cdiv class=\"position-relative w-100 overflow-hidden rounded-2\" data-code-block>\u003Cdiv class=\"d-flex justify-content-end border-bottom\" style=\"background:#2b2c3b;\">\u003Cbutton type=\"button\" class=\"btn btn-link btn-sm text-light\" title=\"Copy\" data-code-button>\u003Cspan data-code-default style=\"\">\u003Ci class=\"fal fa-copy me-2\">\u003C\u002Fi> Copy \u003C\u002Fspan>\u003Cspan class=\"text-success\" data-code-success style=\"display:none;\">\u003Ci class=\"fal fa-check ms-2\">\u003C\u002Fi> Copied \u003C\u002Fspan>\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cdiv class=\"small\">\u003Cpre class=\"hljs p-2\" data-code-content>FC.client.on(&#x27;cart-submit&#x27;, function (params, next) {\n  var product1_exists = false;\n  if (!jQuery.isEmptyObject(FC.json.items)) {\n    jQuery.each(FC.json.items, function (i, item) {\n      if (item.category == &#x27;Product1&#x27;) {\n        product1_exists = true;\n      }\n    });\n  }\n  if (params.data.category == &#x27;Product2&#x27; &amp;&amp; product1_exists) {\n    next(false);\n  } else {\n    next(true);\n  }\n});\n\u003C\u002Fpre>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fsection>\u003Csection id=\"notes\" data-title=\"Notes\" data-title-node=\"H2\">\u003Chr class=\"my-8\" style=\"margin-left: -48px; margin-right: -40vw\">\u003Ch2 data-anchor-id=\"notes\">Notes\u003C\u002Fh2>\u003Cul>\u003Cli>\u003Cp>All events are accessed through \u003Ccode class=\"badge bg-soft-danger text-danger\">FC.client\u003C\u002Fcode>, which must be ready before binding — see \u003Ca href=\"https:\u002F\u002Ffoxy.io\u002Fhelp\u002Farticles\u002Fjavascript-overview\" class=\"\">JavaScript Overview\u003C\u002Fa> for using \u003Ccode class=\"badge bg-soft-danger text-danger\">FC.onLoad\u003C\u002Fcode> to ensure this.\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>Not every event has parameters — where none are listed above, the handler receives no arguments.\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>If you find an event you need that isn’t listed here, contact Foxy support.\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003C\u002Fsection>",[1677,1680,1682,1685,1687,1689,1691,1693,1695,1697,1699,1701,1703,1705,1707,1709],{"id":1678,"title":346,"level":1679},"binding-to-an-event","H2",{"id":1681,"title":384,"level":1679},"available-events",{"id":1683,"title":390,"level":1684},"template-events","H3",{"id":1686,"title":466,"level":1684},"sidecart-events",{"id":1688,"title":594,"level":1684},"cart-events",{"id":1690,"title":911,"level":1684},"checkout-events",{"id":1692,"title":1204,"level":1684},"customer-events",{"id":1694,"title":1392,"level":1684},"analytics-events",{"id":1696,"title":1477,"level":1679},"usage-examples",{"id":1698,"title":1482,"level":1684},"pausing-and-canceling-the-event-queue",{"id":1700,"title":1531,"level":1684},"getting-an-event",{"id":1702,"title":1541,"level":1684},"overriding-the-default-action",{"id":1704,"title":1551,"level":1684},"creating-and-triggering-a-custom-event",{"id":1706,"title":1561,"level":1684},"validating-a-checkout-field",{"id":1708,"title":1588,"level":1684},"preventing-an-add-to-cart-with-custom-criteria",{"id":1710,"title":1615,"level":1679},"notes",[1712],{"type":1713,"content":1714},"html","\u003Cp>Foxy’s JavaScript fires events for nearly everything that happens on the cart, checkout, and receipt. Bind to any of these with \u003Ccode class=\"badge bg-soft-danger text-danger\">FC.client.on()\u003C\u002Fcode> to hook in your own custom behavior.\u003C\u002Fp>\u003Ch2>Binding to an event\u003C\u002Fh2>\u003Cpre>\u003Ccode>FC.client.on(&#039;cart-submit&#039;, function (params, next) {\n  \u002F\u002F your code here\n});\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Bind and unbind calls can be chained:\u003C\u002Fp>\u003Cpre>\u003Ccode>FC.client\n  .on(&#039;cart-item-remove&#039;, cartItemRemoveHandler)\n  .on(&#039;cart-item-remove.done&#039;, cartItemRemoveDoneHandler)\n  .on(&#039;cart-submit&#039;, cartSubmitHandler)\n  .on(&#039;cart-submit.done&#039;, cartSubmitDoneHandler);\n\nFC.client\n  .off(&#039;cart-item-remove&#039;, cartItemRemoveHandler)\n  .off(&#039;cart-submit&#039;, cartSubmitHandler);\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Every event listed below also fires a corresponding \u003Ccode class=\"badge bg-soft-danger text-danger\">.done\u003C\u002Fcode> event once the action completes, for example \u003Ccode class=\"badge bg-soft-danger text-danger\">cart-item-remove.done\u003C\u002Fcode>.\u003C\u002Fp>\u003Ch2>Available events\u003C\u002Fh2>\u003Ch3>Template events\u003C\u002Fh3>\u003Cdiv class=\"table-responsive w-100\">\u003Ctable class=\"table table-lg table-bordered my-5\">\u003Cthead>\u003Ctr>\u003Cth>\u003Cp>Event\u003C\u002Fp>\u003C\u002Fth>\u003Cth>\u003Cp>Description\u003C\u002Fp>\u003C\u002Fth>\u003Cth>\u003Cp>Params\u003C\u002Fp>\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">render.done\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>Fires after a template block is updated.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">selector\u003C\u002Fcode> — HTML selector for the block being rendered; \u003Ccode class=\"badge bg-soft-danger text-danger\">block_id\u003C\u002Fcode> — name of the block being rendered\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\u003Ch3>Sidecart events\u003C\u002Fh3>\u003Cdiv class=\"table-responsive w-100\">\u003Ctable class=\"table table-lg table-bordered my-5\">\u003Cthead>\u003Ctr>\u003Cth>\u003Cp>Event\u003C\u002Fp>\u003C\u002Fth>\u003Cth>\u003Cp>Description\u003C\u002Fp>\u003C\u002Fth>\u003Cth>\u003Cp>Params\u003C\u002Fp>\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">sidecart-show\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>When the sidecart is displayed.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">element\u003C\u002Fcode> — HTML element that triggered the add to cart; \u003Ccode class=\"badge bg-soft-danger text-danger\">data\u003C\u002Fcode> — parameters in the add to cart; \u003Ccode class=\"badge bg-soft-danger text-danger\">url\u003C\u002Fcode> — URL version of the add to cart\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">sidecart-hide\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>When the sidecart is hidden.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>—\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">sidecart-detach\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>After the sidecart is hidden and detached from the DOM.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>—\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\u003Ch3>Cart events\u003C\u002Fh3>\u003Cdiv class=\"table-responsive w-100\">\u003Ctable class=\"table table-lg table-bordered my-5\">\u003Cthead>\u003Ctr>\u003Cth>\u003Cp>Event\u003C\u002Fp>\u003C\u002Fth>\u003Cth>\u003Cp>Description\u003C\u002Fp>\u003C\u002Fth>\u003Cth>\u003Cp>Params\u003C\u002Fp>\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">cart-submit\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>When the cart is loaded — as an add to cart, view cart, empty cart request, etc.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">element\u003C\u002Fcode> — HTML element that triggered the request; \u003Ccode class=\"badge bg-soft-danger text-danger\">data\u003C\u002Fcode> — parameters in the cart request; \u003Ccode class=\"badge bg-soft-danger text-danger\">url\u003C\u002Fcode> — URL version of the request\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">cart-item-quantity-update\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>When a quantity is changed in the cart.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">id\u003C\u002Fcode> — product ID being adjusted; \u003Ccode class=\"badge bg-soft-danger text-danger\">quantity\u003C\u002Fcode> — new quantity amount\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">cart-item-remove\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>When a product is removed from the cart.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">id\u003C\u002Fcode> — product ID being adjusted\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">cart-coupon-add\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>When a coupon or gift card is added.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">code\u003C\u002Fcode> — coupon or gift card code being added\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">cart-coupon-remove\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>When a coupon is removed.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">coupon_code_id\u003C\u002Fcode> — coupon code ID being removed\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">cart-gift-card-remove\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>When a gift card is removed.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">gift_card_code_id\u003C\u002Fcode> — gift card code ID being removed\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">cart-update\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>When the cart is updated, e.g. rendering Twig templates or setting \u003Ccode class=\"badge bg-soft-danger text-danger\">FC.json\u003C\u002Fcode>.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>—\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">cart-shipping-options-update\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>When shipping options are updated.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">address\u003C\u002Fcode> — JSON object of the address in use (e.g. \u003Ccode class=\"badge bg-soft-danger text-danger\">FC.json.shipping_address\u003C\u002Fcode>); \u003Ccode class=\"badge bg-soft-danger text-danger\">fields\u003C\u002Fcode> — JSON object of changed fields (e.g. \u003Ccode class=\"badge bg-soft-danger text-danger\">{&quot;shipping_city&quot;: &quot;New York&quot;}\u003C\u002Fcode>)\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\u003Ch3>Checkout events\u003C\u002Fh3>\u003Cdiv class=\"table-responsive w-100\">\u003Ctable class=\"table table-lg table-bordered my-5\">\u003Cthead>\u003Ctr>\u003Cth>\u003Cp>Event\u003C\u002Fp>\u003C\u002Fth>\u003Cth>\u003Cp>Description\u003C\u002Fp>\u003C\u002Fth>\u003Cth>\u003Cp>Params\u003C\u002Fp>\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">checkout-submit\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>When the checkout is submitted.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>—\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">checkout-submit-enable\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>When the checkout submit button is re-enabled after a stopped validation attempt.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>—\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">checkout-submit-disable\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>When the checkout submit button is clicked, disabling it and triggering validation.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>—\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">checkout-shipping-options-update\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>When shipping options are updated on the checkout.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">address\u003C\u002Fcode> — JSON object of the address in use; \u003Ccode class=\"badge bg-soft-danger text-danger\">custom_fields\u003C\u002Fcode> — JSON object of custom fields included with shipping rate calculations\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">express-checkout-select\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>When a customer initiates an express checkout option.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">gateway\u003C\u002Fcode> — payment gateway code; \u003Ccode class=\"badge bg-soft-danger text-danger\">payment_type\u003C\u002Fcode> — express payment type code selected\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">express-checkout-confirm\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>When a customer completes express checkout authentication.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">gateway\u003C\u002Fcode>; \u003Ccode class=\"badge bg-soft-danger text-danger\">payment_type\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">express-checkout-cancel\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>When a customer cancels an express checkout option.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">gateway\u003C\u002Fcode>; \u003Ccode class=\"badge bg-soft-danger text-danger\">payment_type\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">express-checkout-error\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>When an express checkout option errors.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">gateway\u003C\u002Fcode>; \u003Ccode class=\"badge bg-soft-danger text-danger\">payment_type\u003C\u002Fcode>; \u003Ccode class=\"badge bg-soft-danger text-danger\">reason\u003C\u002Fcode> — the failure reason, if available\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\u003Ch3>Customer events\u003C\u002Fh3>\u003Cp>Fired on both the cart and the checkout.\u003C\u002Fp>\u003Cdiv class=\"table-responsive w-100\">\u003Ctable class=\"table table-lg table-bordered my-5\">\u003Cthead>\u003Ctr>\u003Cth>\u003Cp>Event\u003C\u002Fp>\u003C\u002Fth>\u003Cth>\u003Cp>Description\u003C\u002Fp>\u003C\u002Fth>\u003Cth>\u003Cp>Params\u003C\u002Fp>\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">customer-email-update\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>When an entered email address is checked.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">customer_email\u003C\u002Fcode> — the email address entered\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">customer-login\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>When a returning customer successfully logs in.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>—\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">customer-address-update\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>When a complete address is entered for an address type (e.g. billing\u002Fshipping).\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>—\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">customer-address-change\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>When any customer address field is changed.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">address\u003C\u002Fcode> — JSON object of the address in use; \u003Ccode class=\"badge bg-soft-danger text-danger\">fields\u003C\u002Fcode> — JSON object of changed fields\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">customer-shipping-option-select\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>When a customer selects a shipping rate.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>Parameters set to the contents of the address object (e.g. \u003Ccode class=\"badge bg-soft-danger text-danger\">FC.json.shipping_address\u003C\u002Fcode>)\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\u003Ch3>Analytics events\u003C\u002Fh3>\u003Cp>Fired on the cart, checkout, and receipt.\u003C\u002Fp>\u003Cdiv class=\"table-responsive w-100\">\u003Ctable class=\"table table-lg table-bordered my-5\">\u003Cthead>\u003Ctr>\u003Cth>\u003Cp>Event\u003C\u002Fp>\u003C\u002Fth>\u003Cth>\u003Cp>Description\u003C\u002Fp>\u003C\u002Fth>\u003Cth>\u003Cp>Params\u003C\u002Fp>\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">analytics-gtm-datalayer\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>Fires before adding an entry to the dataLayer for GTM integrations, allowing you to modify the data added for custom tracking.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">event_data\u003C\u002Fcode> — JSON object of the data being added, including \u003Ccode class=\"badge bg-soft-danger text-danger\">event\u003C\u002Fcode> (the event being tracked), \u003Ccode class=\"badge bg-soft-danger text-danger\">ecommerce\u003C\u002Fcode> (event data), and \u003Ccode class=\"badge bg-soft-danger text-danger\">virtual_page_location\u003C\u002Fcode> (URL tracked as the virtual page location)\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\u003Ch2>Usage examples\u003C\u002Fh2>\u003Ch3>Pausing and canceling the event queue\u003C\u002Fh3>\u003Cp>Synchronous handlers can return \u003Ccode class=\"badge bg-soft-danger text-danger\">false\u003C\u002Fcode> to stop processing:\u003C\u002Fp>\u003Cpre>\u003Ccode>FC.client.on(&#039;cart-item-remove&#039;, function (params) {\n  if (params.itemPrice == 0) {\n    alert(&#039;You cannot remove free products from your cart&#039;);\n    return false;\n  }\n});\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Declare a handler with a second parameter (conventionally \u003Ccode class=\"badge bg-soft-danger text-danger\">next\u003C\u002Fcode>) to make it asynchronous. The event queue pauses until \u003Ccode class=\"badge bg-soft-danger text-danger\">next()\u003C\u002Fcode> is called to continue, or \u003Ccode class=\"badge bg-soft-danger text-danger\">next(false)\u003C\u002Fcode> to stop it. A returned value from an asynchronous handler is ignored:\u003C\u002Fp>\u003Cpre>\u003Ccode>FC.client.on(&#039;cart-coupon-add&#039;, function (params, next) {\n  $.ajax({\n    type: &#039;get&#039;,\n    url: &#039;http:\u002F\u002Fapi.example.com\u002Fcheck-coupon-availability&#039;,\n    dataType: &#039;jsonp&#039;,\n    data: { couponCode: params.couponCode }\n  }).done(function (data) {\n    if (data.ok) {\n      next();\n    } else {\n      alert(&#039;Sorry, your coupon is not available today.&#039;);\n      next(false);\n    }\n  });\n}).on(&#039;cart-coupon-add.done&#039;, function (params) {\n  alert(&#039;Coupon &#039; + params.couponCode + &#039; has been added&#039;);\n});\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Ch3>Getting an event\u003C\u002Fh3>\u003Cpre>\u003Ccode>var event = FC.client.event(&#039;cart-item-remove&#039;);\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Ch3>Overriding the default action\u003C\u002Fh3>\u003Cpre>\u003Ccode>FC.client.event(&#039;cart-item-remove&#039;).override(newDefaultHandler);\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Ch3>Creating and triggering a custom event\u003C\u002Fh3>\u003Cpre>\u003Ccode>FC.client.wrap(&#039;your-own-event&#039;, function (params) {\n  \u002F\u002F body\n});\nFC.client.event(&#039;your-own-event&#039;).trigger(params);\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Ch3>Validating a checkout field\u003C\u002Fh3>\u003Cp>This example requires a value on a \u003Ccode class=\"badge bg-soft-danger text-danger\">date\u003C\u002Fcode> input inside a form with \u003Ccode class=\"badge bg-soft-danger text-danger\">id=&quot;my-specific-form&quot;\u003C\u002Fcode> before allowing the checkout to submit:\u003C\u002Fp>\u003Cpre>\u003Ccode>var FC = FC || {};\nFC.onLoad = function () {\n  FC.client.on(&#039;cart-submit&#039;, function (params, next) {\n    $element = $(params.element);\n    if (\n      $element.attr(&#039;id&#039;) == &#039;my-specific-form&#039;\n      &amp;&amp; $element.find(&#039;[name=&quot;date&quot;]&#039;).length &gt; 0\n      &amp;&amp; !$element.find(&#039;[name=&quot;date&quot;]&#039;).val()\n    ) {\n      alert(&#039;Date must be filled out&#039;);\n    } else {\n      next();\n    }\n  });\n};\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Ch3>Preventing an add-to-cart with custom criteria\u003C\u002Fh3>\u003Cp>This example prevents adding a product from category \u003Ccode class=\"badge bg-soft-danger text-danger\">Product2\u003C\u002Fcode> if the cart already contains a product from category \u003Ccode class=\"badge bg-soft-danger text-danger\">Product1\u003C\u002Fcode>:\u003C\u002Fp>\u003Cpre>\u003Ccode>FC.client.on(&#039;cart-submit&#039;, function (params, next) {\n  var product1_exists = false;\n  if (!jQuery.isEmptyObject(FC.json.items)) {\n    jQuery.each(FC.json.items, function (i, item) {\n      if (item.category == &#039;Product1&#039;) {\n        product1_exists = true;\n      }\n    });\n  }\n  if (params.data.category == &#039;Product2&#039; &amp;&amp; product1_exists) {\n    next(false);\n  } else {\n    next(true);\n  }\n});\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Ch2>Notes\u003C\u002Fh2>\u003Cul>\u003Cli>\u003Cp>All events are accessed through \u003Ccode class=\"badge bg-soft-danger text-danger\">FC.client\u003C\u002Fcode>, which must be ready before binding — see \u003Ca href=\"https:\u002F\u002Ffoxy.io\u002Fhelp\u002Farticles\u002Fjavascript-overview\" class=\"\">JavaScript Overview\u003C\u002Fa> for using \u003Ccode class=\"badge bg-soft-danger text-danger\">FC.onLoad\u003C\u002Fcode> to ensure this.\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>Not every event has parameters — where none are listed above, the handler receives no arguments.\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>If you find an event you need that isn’t listed here, contact Foxy support.\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>",{"name":1716,"created_at":1717,"published_at":1718,"updated_at":1719,"id":1720,"uuid":47,"content":1721,"slug":48,"full_slug":48,"sort_by_date":59,"position":1900,"tag_list":1901,"is_startpage":24,"parent_id":59,"meta_data":59,"group_id":1902,"first_published_at":1903,"release_id":59,"lang":65,"path":59,"alternates":1904,"default_full_slug":59,"translated_slugs":59},"Contact","2022-09-23T19:56:58.957Z","2025-05-08T18:24:40.382Z","2025-05-08T18:24:40.392Z",3138,{"seo":1722,"_uid":1725,"title":1726,"action":1727,"fields":1728,"method":1876,"columns":1877,"subtitle":1891,"component":48,"button_text":1897,"submit_title":1898,"submit_subtitle":1899},{"_uid":1723,"title":1716,"plugin":1724,"description":13},"24ff7574-3bcc-48d2-85b5-e529dfea1cc4","meta-fields","8f54f1da-9d8f-49b2-89e7-840e886491cb","We're here to help.","https:\u002F\u002Fusebasin.com\u002Ff\u002F029f48d65402",[1729,1734,1738,1847,1850,1855,1870],{"_uid":1730,"name":1731,"type":332,"label":1732,"options":13,"required":33,"component":1733,"placeholder":13},"9a70b226-2036-4f90-a052-b3efa61c5896","name","Name","form___field",{"_uid":1735,"name":1736,"type":1736,"label":1737,"options":13,"required":33,"component":1733,"placeholder":13},"86ba35be-ff43-4a28-8633-14052a8f6622","email","Email Address",{"_uid":1739,"name":1740,"type":1741,"label":1742,"options":1743,"required":33,"component":1733,"conditions":1744,"placeholder":13},"3f827475-492c-4f97-aa1e-2386ac263b6c","topic","select","Topic","Presales, Support, Billing, Partnerships, Order Enquiry, Other",[1745,1801,1811,1818,1826,1834,1840],{"_uid":1746,"equals":1747,"fields":1748,"component":1800},"e21d97dd-e68e-4fa6-ba97-bc40f3041dde","Order Enquiry",[1749],{"_uid":1750,"body":1751,"type":1798,"title":13,"component":1799},"b64992bc-6d53-48b8-b7a0-d81e5a062e50",{"type":324,"content":1752},[1753],{"type":327,"content":1754},[1755,1757,1764,1766,1768,1769,1774,1776,1781,1789,1791,1796],{"text":1756,"type":332},"We are ",{"text":1758,"type":332,"marks":1759},"Foxy.io",[1760],{"type":1637,"attrs":1761},{"href":1762,"uuid":59,"anchor":59,"custom":1763,"target":59,"linktype":31},"http:\u002F\u002FFoxy.io",{},{"text":1765,"type":332},", an ecommerce platform powering ecommerce for other merchants. We do not sell products, and are unable to assist with questions about order statuses or refunds for any merchants using our platform. Please contact the merchant you ordered from for assistance. If you’d like to report a store using Foxy for fraudulent practices, please select ‘other’ in the subject.",{"type":1767},"hard_break",{"type":1767},{"text":1770,"type":332,"marks":1771},"NOTE:",[1772],{"type":1773},"bold",{"text":1775,"type":332}," We are ",{"text":1777,"type":332,"marks":1778},"not ",[1779],{"type":1780},"italic",{"text":1782,"type":332,"marks":1783},"Foxy.in",[1784,1788],{"type":1637,"attrs":1785},{"href":1786,"uuid":59,"anchor":59,"custom":1787,"target":59,"linktype":31},"http:\u002F\u002FFoxy.in",{},{"type":1780},{"text":1790,"type":332},". We are not in any way affiliated with ",{"text":1782,"type":332,"marks":1792},[1793],{"type":1637,"attrs":1794},{"href":1786,"uuid":59,"anchor":59,"custom":1795,"target":59,"linktype":31},{},{"text":1797,"type":332},", and cannot help in any way with your order from that website.","danger","global___alert","form___condition",{"_uid":1802,"equals":1803,"fields":1804,"component":1800},"8765c3e1-25cf-44aa-b8ea-fc6094acf9c3","Presales",[1805],{"_uid":1806,"name":1807,"type":1808,"label":13,"options":13,"required":24,"component":1733,"conditions":1809,"placeholder":13,"default_value":1810},"cf464f8e-d643-4f6e-af29-d3abffaf7380","department_email_address","hidden",[],"hello@foxy.io",{"_uid":1812,"equals":208,"fields":1813,"component":1800},"4007b6d8-77e5-421d-bd1e-6f336dd853fb",[1814],{"_uid":1815,"name":1807,"type":1808,"label":13,"options":13,"required":24,"component":1733,"conditions":1816,"placeholder":13,"default_value":1817},"7b4c6aa5-a68c-45e0-9ce1-0a36af10c0c2",[],"help@foxy.io",{"_uid":1819,"equals":1820,"fields":1821,"component":1800},"1dbb8f11-613d-43cd-9e09-1b94f6e19219","Billing",[1822],{"_uid":1823,"name":1807,"type":1808,"label":13,"options":13,"required":24,"component":1733,"conditions":1824,"placeholder":13,"default_value":1825},"a0ac0d1b-bc4f-4a6c-a682-581d450b0b73",[],"help+billing@foxy.io",{"_uid":1827,"equals":1828,"fields":1829,"component":1800},"a0a53a50-7172-4a29-ba58-181e38874e12","Partnerships",[1830],{"_uid":1831,"name":1807,"type":1808,"label":13,"options":13,"required":24,"component":1733,"conditions":1832,"placeholder":13,"default_value":1833},"7aa011d9-f374-4aed-b5a5-929b54aaf152",[],"partners@foxy.io",{"_uid":1835,"equals":1747,"fields":1836,"component":1800},"a4cd431f-25d5-41c7-bfdc-02c908c8fb47",[1837],{"_uid":1838,"name":1807,"type":1808,"label":13,"options":13,"required":24,"component":1733,"conditions":1839,"placeholder":13,"default_value":1810},"f5d52168-d6ae-451b-94ee-2ced1cbd28ad",[],{"_uid":1841,"equals":1842,"fields":1843,"component":1800},"25aba1ed-eb41-4bbc-aa89-f7a7167ea86e","Other",[1844],{"_uid":1845,"name":1807,"type":1808,"label":13,"options":13,"required":24,"component":1733,"conditions":1846,"placeholder":13,"default_value":1810},"f40dfaef-c203-4b71-bf4e-e1b43cef192b",[],{"_uid":1848,"component":1849},"e9c53a05-f40a-4510-aaf8-bc072a235a0c","form___subject",{"_uid":1851,"name":1852,"type":1853,"label":1854,"options":13,"required":33,"component":1733,"placeholder":13},"a4c4d385-fff4-4978-99fb-b68cfea623d6","message","textarea","Message",{"_uid":1856,"name":1857,"type":1741,"label":1858,"options":1859,"required":33,"component":1733,"conditions":1860,"placeholder":13},"8a3c9f85-f438-427d-9c7a-d7b295a14b5b","existing_user","Are you an existing user?","No, Yes",[1861],{"_uid":1862,"equals":1863,"fields":1864,"component":1800},"115933d6-262a-4b59-8fa8-579c5ad73de1","Yes",[1865],{"_uid":1866,"name":1867,"type":332,"label":1868,"options":13,"required":33,"component":1733,"conditions":1869,"placeholder":13},"44b6ff23-98f0-4e95-b7f5-c23e06415c2d","subdomain","Store Subdomain",[],{"_uid":1871,"name":1872,"type":1741,"label":1873,"options":1874,"required":33,"component":1733,"conditions":1875,"placeholder":13},"922a5cef-3af2-4113-8855-36c7910e3ee3","user_type","What type of user are you?","Developer, Designer, Merchant",[],"POST",[1878],{"_uid":1879,"text":1880,"title":1889,"component":1890},"7323b90d-a93a-4bf1-baa9-20d0b7ead61b",{"type":324,"content":1881},[1882],{"type":327,"content":1883},[1884,1886,1887],{"text":1885,"type":332},"855.369.9227",{"type":1767},{"text":1888,"type":332},"9:30am-6pm Central M-F","Pre-sales, Sales, & Partnerships","contact___footer_column",{"type":324,"content":1892},[1893],{"type":327,"content":1894},[1895],{"text":1896,"type":332},"Get in touch to get help from our friendly support team.","Submit","Success!","Your email has been received. We'll get back to you as soon as we can, but it might take a business day. If you don't hear back from us in a timely manner, please check your spam folder to ensure our reply didn't go there.",-80,[],"2fd9fb7d-a48a-4184-acfd-30022d8d6f08","2022-09-23T20:10:45.360Z",[],[288,1906],{"name":1907,"created_at":1908,"published_at":1909,"updated_at":1910,"id":1911,"uuid":1665,"content":1912,"slug":1925,"full_slug":1926,"sort_by_date":59,"position":1927,"tag_list":1928,"is_startpage":24,"parent_id":310,"meta_data":59,"group_id":1929,"first_published_at":1909,"release_id":59,"lang":65,"path":59,"alternates":1930,"default_full_slug":59,"translated_slugs":59},"JavaScript","2026-07-20T21:14:05.160Z","2026-07-20T21:14:28.313Z","2026-07-20T21:14:28.324Z",200263455421156,{"_uid":1913,"icon":13,"name":1907,"type":1914,"pinned":24,"summary":1915,"category":13,"component":297,"blog_posts":1916,"icon_custom":1917,"case_studies":1919,"faq_sections":1920,"featured_guides":1921,"mailbox_category":13,"featured_articles":1922,"featured_blog_posts":1923,"featured_case_studies":1924},"6ac2aa76-e023-4332-bc33-df367c493314","simple","How Foxy's JavaScript works, including events, configuration, sessions, and template rendering, for custom integrations beyond the default cart and checkout.",[],{"id":59,"alt":59,"name":13,"focus":59,"title":59,"source":59,"filename":13,"copyright":59,"fieldtype":81,"meta_data":1918},{},[],[],[],[],[],[],"javascript","help\u002Fcategories\u002Fjavascript",-820,[],"37830f97-9285-4e32-8105-7b383c2b8ec9",[],{},1784584248846]