product
https://www.tjdc.co.uk/wooden-bracelet-box-black
4766
Wooden Bracelet Box - Black
https://www.tjdc.co.uk/cdn-cgi/image/format=auto,metadata=none,quality=85/media/catalog/product/2/3/230614flx03604.jpg
9.95
9.95
GBP
InStock
/Jewellery
/Jewellery /Jewellery Packaging
/Jewellery /Jewellery Packaging/Bangle/bracelet box
/Customisable
/Customisable /Customisable Packaging
94
121
164
222
226
1
2
94
121
222
<p>Premium wooden box for small bracelets.</p> <p><strong>MOQ 10pcs</strong></p>
<p>The Wooden Bracelet Box in black is a premium packaging solution designed to showcase jewellery with elegance and durability. Finished with a high-gloss piano coating, this luxury box features a strong hinge mechanism and a silky shimmer interior, providing both style and protection for a single bracelet.</p>
<p>Perfect for retail presentation or gifting, the bracelet box is supplied with a matching two-piece outer box, adding to its refined look. Its sleek gloss black finish makes it an ideal choice for highlighting luxury jewellery collections.</p>
<p><strong>Material:</strong> Wood<br>
<strong>Finish:</strong> High-gloss black piano<br>
<strong>Interior:</strong> Silky shimmer lining<br>
<strong>Size:</strong> Bracelet box (MOQ 10pcs)<br>
<strong>Use cases:</strong> Bracelet packaging, luxury jewellery display, retail merchandising, gift presentation</p>
<p><strong>Style tip:</strong> Personalise both the lid and the outer box with your logo or artwork for a distinctive branded touch. Print orders typically take <strong>7 days</strong> to complete.</p>
GBP
0
0
https://www.tjdc.co.uk/cdn-cgi/image/format=auto,metadata=none,quality=85/media/catalog/product/2/3/230614flx03602.jpg
https://www.tjdc.co.uk/cdn-cgi/image/format=auto,metadata=none,quality=85/media/catalog/product/2/3/230614flx03601.jpg
https://www.tjdc.co.uk/cdn-cgi/image/format=auto,metadata=none,quality=85/media/catalog/product/2/3/230614flx03606.jpg
https://www.tjdc.co.uk/cdn-cgi/image/format=auto,metadata=none,quality=85/media/catalog/product/2/3/230614flx03609.jpg
add-to-cart
<div data-content-type="html" data-appearance="default" data-element="main"><div class="moq-popup-root" data-moq="10" style="display:none"></div>
<style>
.moq-modal-backdrop{
position:fixed !important; top:0; right:0; bottom:0; left:0;
/* huge z-index to beat sticky headers/menus */
z-index:2147483647;
background:rgba(0,0,0,.45);
display:none;
align-items:center; justify-content:center;
/* avoid iOS weirdness with fixed children */
-webkit-transform:translateZ(0); transform:translateZ(0);
}
.moq-modal{
background:#fff; max-width:520px; width:92%;
border-radius:8px; box-shadow:0 10px 30px rgba(0,0,0,.2);
overflow:hidden; outline:none;
/* mobile safety: if content grows, keep it viewable */
max-height:90vh; overflow:auto;
}
.moq-modal header{padding:14px 16px;border-bottom:1px solid #eee;font-weight:600}
.moq-modal .body{padding:16px;font-size:15px;line-height:1.5}
.moq-modal .hint{margin-top:8px;color:#666;font-size:13px}
.moq-modal footer{display:flex;gap:8px;justify-content:flex-end;padding:12px 16px;background:#fafafa;border-top:1px solid #eee}
.moq-btn{appearance:none;border:1px solid #ddd;background:#fff;padding:8px 12px;border-radius:6px;cursor:pointer}
.moq-btn.primary{background:#8dc4b1;border-color:#8dc4b1;color:#fff;font-weight:600}
.moq-alert-inline{background:#ffe9e6;color:#b6381f;padding:8px 10px;border:1px solid #f2c7c0;border-radius:4px;font-size:14px;margin:10px 0 16px;display:none}
</style>
<!-- Moving this node into <body> at runtime -->
<div class="moq-modal-backdrop" id="moqBackdrop" aria-hidden="true" role="dialog" aria-modal="true">
<div class="moq-modal" role="document" aria-labelledby="moqTitle" aria-describedby="moqDesc" tabindex="-1">
<header id="moqTitle">Minimum order quantity</header>
<div class="body">
<div id="moqDesc">
This product requires at least <strong id="moqValue">10</strong> pcs.
Your current quantity is <strong id="moqCurrent">1</strong>.
</div>
<div class="hint">You can set the quantity to <span id="moqHint">10</span> and continue.</div>
<div class="moq-alert-inline" id="moqInlineMsg"></div>
</div>
<footer>
<button type="button" class="moq-btn" id="moqClose">Close</button>
<button type="button" class="moq-btn primary" id="moqConfirm">Set to 10 & continue</button>
</footer>
</div>
</div>
<script>
(function(){
var root = document.querySelector('.moq-popup-root'); if(!root) return;
var MOQ = parseInt(root.getAttribute('data-moq'),10) || 10;
var bypassOnce = false, lastTrigger = null;
function $(s,c){return (c||document).querySelector(s);}
function qtyField(){return $('form[action*="checkout/cart/add"] input[name="qty"], #qty');}
function currentQty(){
var q = qtyField();
var v = parseFloat((q && (q.value || q.getAttribute('value') || '1')).replace(',','.'));
return isNaN(v)||v<=0 ? 1 : v;
}
// --- Moving backdrop to <body> to escape stacking contexts on mobile
var bd = $('#moqBackdrop');
if (bd && bd.parentNode !== document.body) document.body.appendChild(bd);
// --- Scroll lock helpers (mobile-friendly, restores position)
var scrollY = 0;
function lockScroll(){
scrollY = window.scrollY || window.pageYOffset || 0;
document.body.style.position = 'fixed';
document.body.style.top = '-' + scrollY + 'px';
document.body.style.left = '0';
document.body.style.right = '0';
document.body.style.width = '100%';
}
function unlockScroll(){
document.body.style.position = '';
document.body.style.top = '';
document.body.style.left = '';
document.body.style.right = '';
document.body.style.width = '';
window.scrollTo(0, scrollY);
}
// preventing touchmove scrolling on backdrop (iOS)
bd.addEventListener('touchmove', function(e){ e.preventDefault(); }, {passive:false});
// ---- HARDEN CUSTOMIZE BUTTON: never submit the form ----
var CUSTOMIZE_ID = '#zakeke-customize-button';
function hardenCustomizeButton(ctx){
var btn = (ctx||document).querySelector(CUSTOMIZE_ID);
if (!btn) return;
if (btn.getAttribute('type') !== 'button') btn.setAttribute('type','button');
}
hardenCustomizeButton();
new MutationObserver(function(muts){
for (var i=0;i<muts.length;i++){
if ((muts[i].addedNodes||[]).length) hardenCustomizeButton(muts[i].target);
}
}).observe(document.body, {childList:true, subtree:true});
// ---- Modal helpers ----
function syncText(){
$('#moqValue').textContent = MOQ;
$('#moqHint').textContent = MOQ;
$('#moqConfirm').textContent = 'Set to ' + MOQ + ' & continue';
$('#moqCurrent').textContent = currentQty();
}
function showModal(triggerEl, action){ // action: 'cart' | 'customize' | 'submit'
lastTrigger = { el: triggerEl, action: action };
syncText();
bd.style.display = 'flex';
bd.setAttribute('aria-hidden','false');
lockScroll();
// focus the modal for accessibility & mobile keyboards
setTimeout(function(){ $('.moq-modal') && $('.moq-modal').focus(); }, 0);
}
function hideModal(){
bd.style.display = 'none';
bd.setAttribute('aria-hidden','true');
unlockScroll();
}
function setQtyAndContinue(){
var q = qtyField(); if (!q) return hideModal();
q.value = MOQ;
q.dispatchEvent(new Event('change', {bubbles:true}));
hideModal();
bypassOnce = true; // allow one pass without blocking
if (lastTrigger && lastTrigger.el) lastTrigger.el.click();
}
// Close on Esc
document.addEventListener('keydown', function(e){
if (e.key === 'Escape' && bd.style.display === 'flex') hideModal();
});
// Wire modal buttons / backdrop click
document.addEventListener('click', function(e){
if (e.target.id === 'moqConfirm') setQtyAndContinue();
if (e.target.id === 'moqClose' || e.target.id === 'moqBackdrop') hideModal();
});
function needsPopup(){ return currentQty() < MOQ; }
// Intercept Add to Cart clicks
document.addEventListener('click', function(e){
var btn = e.target.closest('[data-role="tocart"], [data-action="add-to-cart"]');
if (!btn) return;
if (bypassOnce){ bypassOnce=false; return; }
if (needsPopup()){
e.preventDefault(); e.stopImmediatePropagation();
showModal(btn, 'cart');
}
}, true);
// Intercept form submit (fallback)
var form = document.querySelector('form[action*="checkout/cart/add"]');
if (form) {
form.addEventListener('submit', function(e){
if (bypassOnce){ bypassOnce=false; return; }
if (needsPopup()){
e.preventDefault(); e.stopImmediatePropagation();
showModal(form, 'submit');
}
}, true);
}
// Intercept Zakeke/Customize (by ID + generic fallbacks)
var CUSTOMIZE_SEL = CUSTOMIZE_ID + ', .zakeke, .zakeke-btn, [data-zakeke], .btn-customize, .product-customize';
document.addEventListener('click', function(e){
var cz = e.target.closest(CUSTOMIZE_SEL);
if (!cz) return;
if (bypassOnce){ bypassOnce=false; return; }
hardenCustomizeButton();
if (needsPopup()){
e.preventDefault(); e.stopImmediatePropagation();
showModal(cz, 'customize');
}
}, true);
// Keyboard activation on Customize
document.addEventListener('keydown', function(e){
if ((e.key === 'Enter' || e.key === ' ') && e.target.closest(CUSTOMIZE_SEL)){
if (bypassOnce){ bypassOnce=false; return; }
hardenCustomizeButton();
if (needsPopup()){
e.preventDefault(); e.stopImmediatePropagation();
showModal(e.target.closest(CUSTOMIZE_SEL), 'customize');
}
}
}, true);
// Inline nudge under qty
document.addEventListener('change', function(e){
var q = qtyField();
if (q && e.target === q) {
var msg = $('#moqInlineMsg');
if (currentQty() < MOQ){ msg.style.display='block'; msg.textContent='Minimum is '+MOQ+' pcs.'; }
else { msg.style.display='none'; }
}
});
// Initial text sync
syncText();
})();
</script></div>
Black
Wood
23
5.5
3.5
121
94
Jewellery Packaging
https://www.tjdc.co.uk/jewellery/packaging
1/2/94/121
1
/Jewellery /Jewellery Packaging