", a.firstChild.setAttribute("value", ""), "" === a.firstChild.getAttribute("value") }) || jb("value", function (a, b, c) { return c || "input" !== a.nodeName.toLowerCase() ? void 0 : a.defaultValue }), ib(function (a) { return null == a.getAttribute("disabled") }) || jb(L, function (a, b, c) { var d; return c ? void 0 : a[b] === !0 ? b.toLowerCase() : (d = a.getAttributeNode(b)) && d.specified ? d.value : null }), fb }(a); m.find = s, m.expr = s.selectors, m.expr[":"] = m.expr.pseudos, m.unique = s.uniqueSort, m.text = s.getText, m.isXMLDoc = s.isXML, m.contains = s.contains; var t = m.expr.match.needsContext, u = /^<(\w+)\s*\/?>(?:<\/\1>|)$/, v = /^.[^:#\[\.,]*$/; function w(a, b, c) { if (m.isFunction(b)) return m.grep(a, function (a, d) { return !!b.call(a, d, a) !== c }); if (b.nodeType) return m.grep(a, function (a) { return a === b !== c }); if ("string" == typeof b) { if (v.test(b)) return m.filter(b, a, c); b = m.filter(b, a) } return m.grep(a, function (a) { return m.inArray(a, b) >= 0 !== c }) } m.filter = function (a, b, c) { var d = b[0]; return c && (a = ":not(" + a + ")"), 1 === b.length && 1 === d.nodeType ? m.find.matchesSelector(d, a) ? [d] : [] : m.find.matches(a, m.grep(b, function (a) { return 1 === a.nodeType })) }, m.fn.extend({ find: function (a) { var b, c = [], d = this, e = d.length; if ("string" != typeof a) return this.pushStack(m(a).filter(function () { for (b = 0; e > b; b++)if (m.contains(d[b], this)) return !0 })); for (b = 0; e > b; b++)m.find(a, d[b], c); return c = this.pushStack(e > 1 ? m.unique(c) : c), c.selector = this.selector ? this.selector + " " + a : a, c }, filter: function (a) { return this.pushStack(w(this, a || [], !1)) }, not: function (a) { return this.pushStack(w(this, a || [], !0)) }, is: function (a) { return !!w(this, "string" == typeof a && t.test(a) ? m(a) : a || [], !1).length } }); var x, y = a.document, z = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, A = m.fn.init = function (a, b) { var c, d; if (!a) return this; if ("string" == typeof a) { if (c = "<" === a.charAt(0) && ">" === a.charAt(a.length - 1) && a.length >= 3 ? [null, a, null] : z.exec(a), !c || !c[1] && b) return !b || b.jquery ? (b || x).find(a) : this.constructor(b).find(a); if (c[1]) { if (b = b instanceof m ? b[0] : b, m.merge(this, m.parseHTML(c[1], b && b.nodeType ? b.ownerDocument || b : y, !0)), u.test(c[1]) && m.isPlainObject(b)) for (c in b) m.isFunction(this[c]) ? this[c](b[c]) : this.attr(c, b[c]); return this } if (d = y.getElementById(c[2]), d && d.parentNode) { if (d.id !== c[2]) return x.find(a); this.length = 1, this[0] = d } return this.context = y, this.selector = a, this } return a.nodeType ? (this.context = this[0] = a, this.length = 1, this) : m.isFunction(a) ? "undefined" != typeof x.ready ? x.ready(a) : a(m) : (void 0 !== a.selector && (this.selector = a.selector, this.context = a.context), m.makeArray(a, this)) }; A.prototype = m.fn, x = m(y); var B = /^(?:parents|prev(?:Until|All))/, C = { children: !0, contents: !0, next: !0, prev: !0 }; m.extend({ dir: function (a, b, c) { var d = [], e = a[b]; while (e && 9 !== e.nodeType && (void 0 === c || 1 !== e.nodeType || !m(e).is(c))) 1 === e.nodeType && d.push(e), e = e[b]; return d }, sibling: function (a, b) { for (var c = []; a; a = a.nextSibling)1 === a.nodeType && a !== b && c.push(a); return c } }), m.fn.extend({ has: function (a) { var b, c = m(a, this), d = c.length; return this.filter(function () { for (b = 0; d > b; b++)if (m.contains(this, c[b])) return !0 }) }, closest: function (a, b) { for (var c, d = 0, e = this.length, f = [], g = t.test(a) || "string" != typeof a ? m(a, b || this.context) : 0; e > d; d++)for (c = this[d]; c && c !== b; c = c.parentNode)if (c.nodeType < 11 && (g ? g.index(c) > -1 : 1 === c.nodeType && m.find.matchesSelector(c, a))) { f.push(c); break } return this.pushStack(f.length > 1 ? m.unique(f) : f) }, index: function (a) { return a ? "string" == typeof a ? m.inArray(this[0], m(a)) : m.inArray(a.jquery ? a[0] : a, this) : this[0] && this[0].parentNode ? this.first().prevAll().length : -1 }, add: function (a, b) { return this.pushStack(m.unique(m.merge(this.get(), m(a, b)))) }, addBack: function (a) { return this.add(null == a ? this.prevObject : this.prevObject.filter(a)) } }); function D(a, b) { do a = a[b]; while (a && 1 !== a.nodeType); return a } m.each({ parent: function (a) { var b = a.parentNode; return b && 11 !== b.nodeType ? b : null }, parents: function (a) { return m.dir(a, "parentNode") }, parentsUntil: function (a, b, c) { return m.dir(a, "parentNode", c) }, next: function (a) { return D(a, "nextSibling") }, prev: function (a) { return D(a, "previousSibling") }, nextAll: function (a) { return m.dir(a, "nextSibling") }, prevAll: function (a) { return m.dir(a, "previousSibling") }, nextUntil: function (a, b, c) { return m.dir(a, "nextSibling", c) }, prevUntil: function (a, b, c) { return m.dir(a, "previousSibling", c) }, siblings: function (a) { return m.sibling((a.parentNode || {}).firstChild, a) }, children: function (a) { return m.sibling(a.firstChild) }, contents: function (a) { return m.nodeName(a, "iframe") ? a.contentDocument || a.contentWindow.document : m.merge([], a.childNodes) } }, function (a, b) { m.fn[a] = function (c, d) { var e = m.map(this, b, c); return "Until" !== a.slice(-5) && (d = c), d && "string" == typeof d && (e = m.filter(d, e)), this.length > 1 && (C[a] || (e = m.unique(e)), B.test(a) && (e = e.reverse())), this.pushStack(e) } }); var E = /\S+/g, F = {}; function G(a) { var b = F[a] = {}; return m.each(a.match(E) || [], function (a, c) { b[c] = !0 }), b } m.Callbacks = function (a) { a = "string" == typeof a ? F[a] || G(a) : m.extend({}, a); var b, c, d, e, f, g, h = [], i = !a.once && [], j = function (l) { for (c = a.memory && l, d = !0, f = g || 0, g = 0, e = h.length, b = !0; h && e > f; f++)if (h[f].apply(l[0], l[1]) === !1 && a.stopOnFalse) { c = !1; break } b = !1, h && (i ? i.length && j(i.shift()) : c ? h = [] : k.disable()) }, k = { add: function () { if (h) { var d = h.length; !function f(b) { m.each(b, function (b, c) { var d = m.type(c); "function" === d ? a.unique && k.has(c) || h.push(c) : c && c.length && "string" !== d && f(c) }) }(arguments), b ? e = h.length : c && (g = d, j(c)) } return this }, remove: function () { return h && m.each(arguments, function (a, c) { var d; while ((d = m.inArray(c, h, d)) > -1) h.splice(d, 1), b && (e >= d && e-- , f >= d && f--) }), this }, has: function (a) { return a ? m.inArray(a, h) > -1 : !(!h || !h.length) }, empty: function () { return h = [], e = 0, this }, disable: function () { return h = i = c = void 0, this }, disabled: function () { return !h }, lock: function () { return i = void 0, c || k.disable(), this }, locked: function () { return !i }, fireWith: function (a, c) { return !h || d && !i || (c = c || [], c = [a, c.slice ? c.slice() : c], b ? i.push(c) : j(c)), this }, fire: function () { return k.fireWith(this, arguments), this }, fired: function () { return !!d } }; return k }, m.extend({ Deferred: function (a) { var b = [["resolve", "done", m.Callbacks("once memory"), "resolved"], ["reject", "fail", m.Callbacks("once memory"), "rejected"], ["notify", "progress", m.Callbacks("memory")]], c = "pending", d = { state: function () { return c }, always: function () { return e.done(arguments).fail(arguments), this }, then: function () { var a = arguments; return m.Deferred(function (c) { m.each(b, function (b, f) { var g = m.isFunction(a[b]) && a[b]; e[f[1]](function () { var a = g && g.apply(this, arguments); a && m.isFunction(a.promise) ? a.promise().done(c.resolve).fail(c.reject).progress(c.notify) : c[f[0] + "With"](this === d ? c.promise() : this, g ? [a] : arguments) }) }), a = null }).promise() }, promise: function (a) { return null != a ? m.extend(a, d) : d } }, e = {}; return d.pipe = d.then, m.each(b, function (a, f) { var g = f[2], h = f[3]; d[f[1]] = g.add, h && g.add(function () { c = h }, b[1 ^ a][2].disable, b[2][2].lock), e[f[0]] = function () { return e[f[0] + "With"](this === e ? d : this, arguments), this }, e[f[0] + "With"] = g.fireWith }), d.promise(e), a && a.call(e, e), e }, when: function (a) { var b = 0, c = d.call(arguments), e = c.length, f = 1 !== e || a && m.isFunction(a.promise) ? e : 0, g = 1 === f ? a : m.Deferred(), h = function (a, b, c) { return function (e) { b[a] = this, c[a] = arguments.length > 1 ? d.call(arguments) : e, c === i ? g.notifyWith(b, c) : --f || g.resolveWith(b, c) } }, i, j, k; if (e > 1) for (i = new Array(e), j = new Array(e), k = new Array(e); e > b; b++)c[b] && m.isFunction(c[b].promise) ? c[b].promise().done(h(b, k, c)).fail(g.reject).progress(h(b, j, i)) : --f; return f || g.resolveWith(k, c), g.promise() } }); var H; m.fn.ready = function (a) { return m.ready.promise().done(a), this }, m.extend({ isReady: !1, readyWait: 1, holdReady: function (a) { a ? m.readyWait++ : m.ready(!0) }, ready: function (a) { if (a === !0 ? !--m.readyWait : !m.isReady) { if (!y.body) return setTimeout(m.ready); m.isReady = !0, a !== !0 && --m.readyWait > 0 || (H.resolveWith(y, [m]), m.fn.triggerHandler && (m(y).triggerHandler("ready"), m(y).off("ready"))) } } }); function I() { y.addEventListener ? (y.removeEventListener("DOMContentLoaded", J, !1), a.removeEventListener("load", J, !1)) : (y.detachEvent("onreadystatechange", J), a.detachEvent("onload", J)) } function J() { (y.addEventListener || "load" === event.type || "complete" === y.readyState) && (I(), m.ready()) } m.ready.promise = function (b) { if (!H) if (H = m.Deferred(), "complete" === y.readyState) setTimeout(m.ready); else if (y.addEventListener) y.addEventListener("DOMContentLoaded", J, !1), a.addEventListener("load", J, !1); else { y.attachEvent("onreadystatechange", J), a.attachEvent("onload", J); var c = !1; try { c = null == a.frameElement && y.documentElement } catch (d) { } c && c.doScroll && !function e() { if (!m.isReady) { try { c.doScroll("left") } catch (a) { return setTimeout(e, 50) } I(), m.ready() } }() } return H.promise(b) }; var K = "undefined", L; for (L in m(k)) break; k.ownLast = "0" !== L, k.inlineBlockNeedsLayout = !1, m(function () { var a, b, c, d; c = y.getElementsByTagName("body")[0], c && c.style && (b = y.createElement("div"), d = y.createElement("div"), d.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px", c.appendChild(d).appendChild(b), typeof b.style.zoom !== K && (b.style.cssText = "display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1", k.inlineBlockNeedsLayout = a = 3 === b.offsetWidth, a && (c.style.zoom = 1)), c.removeChild(d)) }), function () { var a = y.createElement("div"); if (null == k.deleteExpando) { k.deleteExpando = !0; try { delete a.test } catch (b) { k.deleteExpando = !1 } } a = null }(), m.acceptData = function (a) { var b = m.noData[(a.nodeName + " ").toLowerCase()], c = +a.nodeType || 1; return 1 !== c && 9 !== c ? !1 : !b || b !== !0 && a.getAttribute("classid") === b }; var M = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, N = /([A-Z])/g; function O(a, b, c) { if (void 0 === c && 1 === a.nodeType) { var d = "data-" + b.replace(N, "-$1").toLowerCase(); if (c = a.getAttribute(d), "string" == typeof c) { try { c = "true" === c ? !0 : "false" === c ? !1 : "null" === c ? null : +c + "" === c ? +c : M.test(c) ? m.parseJSON(c) : c } catch (e) { } m.data(a, b, c) } else c = void 0 } return c } function P(a) { var b; for (b in a) if (("data" !== b || !m.isEmptyObject(a[b])) && "toJSON" !== b) return !1; return !0 } function Q(a, b, d, e) { if (m.acceptData(a)) { var f, g, h = m.expando, i = a.nodeType, j = i ? m.cache : a, k = i ? a[h] : a[h] && h; if (k && j[k] && (e || j[k].data) || void 0 !== d || "string" != typeof b) return k || (k = i ? a[h] = c.pop() || m.guid++ : h), j[k] || (j[k] = i ? {} : { toJSON: m.noop }), ("object" == typeof b || "function" == typeof b) && (e ? j[k] = m.extend(j[k], b) : j[k].data = m.extend(j[k].data, b)), g = j[k], e || (g.data || (g.data = {}), g = g.data), void 0 !== d && (g[m.camelCase(b)] = d), "string" == typeof b ? (f = g[b], null == f && (f = g[m.camelCase(b)])) : f = g, f } } function R(a, b, c) { if (m.acceptData(a)) { var d, e, f = a.nodeType, g = f ? m.cache : a, h = f ? a[m.expando] : m.expando; if (g[h]) { if (b && (d = c ? g[h] : g[h].data)) { m.isArray(b) ? b = b.concat(m.map(b, m.camelCase)) : b in d ? b = [b] : (b = m.camelCase(b), b = b in d ? [b] : b.split(" ")), e = b.length; while (e--) delete d[b[e]]; if (c ? !P(d) : !m.isEmptyObject(d)) return } (c || (delete g[h].data, P(g[h]))) && (f ? m.cleanData([a], !0) : k.deleteExpando || g != g.window ? delete g[h] : g[h] = null) } } } m.extend({ cache: {}, noData: { "applet ": !0, "embed ": !0, "object ": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" }, hasData: function (a) { return a = a.nodeType ? m.cache[a[m.expando]] : a[m.expando], !!a && !P(a) }, data: function (a, b, c) { return Q(a, b, c) }, removeData: function (a, b) { return R(a, b) }, _data: function (a, b, c) { return Q(a, b, c, !0) }, _removeData: function (a, b) { return R(a, b, !0) } }), m.fn.extend({ data: function (a, b) { var c, d, e, f = this[0], g = f && f.attributes; if (void 0 === a) { if (this.length && (e = m.data(f), 1 === f.nodeType && !m._data(f, "parsedAttrs"))) { c = g.length; while (c--) g[c] && (d = g[c].name, 0 === d.indexOf("data-") && (d = m.camelCase(d.slice(5)), O(f, d, e[d]))); m._data(f, "parsedAttrs", !0) } return e } return "object" == typeof a ? this.each(function () { m.data(this, a) }) : arguments.length > 1 ? this.each(function () { m.data(this, a, b) }) : f ? O(f, a, m.data(f, a)) : void 0 }, removeData: function (a) { return this.each(function () { m.removeData(this, a) }) } }), m.extend({ queue: function (a, b, c) { var d; return a ? (b = (b || "fx") + "queue", d = m._data(a, b), c && (!d || m.isArray(c) ? d = m._data(a, b, m.makeArray(c)) : d.push(c)), d || []) : void 0 }, dequeue: function (a, b) { b = b || "fx"; var c = m.queue(a, b), d = c.length, e = c.shift(), f = m._queueHooks(a, b), g = function () { m.dequeue(a, b) }; "inprogress" === e && (e = c.shift(), d--), e && ("fx" === b && c.unshift("inprogress"), delete f.stop, e.call(a, g, f)), !d && f && f.empty.fire() }, _queueHooks: function (a, b) { var c = b + "queueHooks"; return m._data(a, c) || m._data(a, c, { empty: m.Callbacks("once memory").add(function () { m._removeData(a, b + "queue"), m._removeData(a, c) }) }) } }), m.fn.extend({ queue: function (a, b) { var c = 2; return "string" != typeof a && (b = a, a = "fx", c--), arguments.length < c ? m.queue(this[0], a) : void 0 === b ? this : this.each(function () { var c = m.queue(this, a, b); m._queueHooks(this, a), "fx" === a && "inprogress" !== c[0] && m.dequeue(this, a) }) }, dequeue: function (a) { return this.each(function () { m.dequeue(this, a) }) }, clearQueue: function (a) { return this.queue(a || "fx", []) }, promise: function (a, b) { var c, d = 1, e = m.Deferred(), f = this, g = this.length, h = function () { --d || e.resolveWith(f, [f]) }; "string" != typeof a && (b = a, a = void 0), a = a || "fx"; while (g--) c = m._data(f[g], a + "queueHooks"), c && c.empty && (d++ , c.empty.add(h)); return h(), e.promise(b) } }); var S = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source, T = ["Top", "Right", "Bottom", "Left"], U = function (a, b) { return a = b || a, "none" === m.css(a, "display") || !m.contains(a.ownerDocument, a) }, V = m.access = function (a, b, c, d, e, f, g) { var h = 0, i = a.length, j = null == c; if ("object" === m.type(c)) { e = !0; for (h in c) m.access(a, b, h, c[h], !0, f, g) } else if (void 0 !== d && (e = !0, m.isFunction(d) || (g = !0), j && (g ? (b.call(a, d), b = null) : (j = b, b = function (a, b, c) { return j.call(m(a), c) })), b)) for (; i > h; h++)b(a[h], c, g ? d : d.call(a[h], h, b(a[h], c))); return e ? a : j ? b.call(a) : i ? b(a[0], c) : f }, W = /^(?:checkbox|radio)$/i; !function () { var a = y.createElement("input"), b = y.createElement("div"), c = y.createDocumentFragment(); if (b.innerHTML = "
a", k.leadingWhitespace = 3 === b.firstChild.nodeType, k.tbody = !b.getElementsByTagName("tbody").length, k.htmlSerialize = !!b.getElementsByTagName("link").length, k.html5Clone = "<:nav>" !== y.createElement("nav").cloneNode(!0).outerHTML, a.type = "checkbox", a.checked = !0, c.appendChild(a), k.appendChecked = a.checked, b.innerHTML = "", k.noCloneChecked = !!b.cloneNode(!0).lastChild.defaultValue, c.appendChild(b), b.innerHTML = "", k.checkClone = b.cloneNode(!0).cloneNode(!0).lastChild.checked, k.noCloneEvent = !0, b.attachEvent && (b.attachEvent("onclick", function () { k.noCloneEvent = !1 }), b.cloneNode(!0).click()), null == k.deleteExpando) { k.deleteExpando = !0; try { delete b.test } catch (d) { k.deleteExpando = !1 } } }(), function () { var b, c, d = y.createElement("div"); for (b in { submit: !0, change: !0, focusin: !0 }) c = "on" + b, (k[b + "Bubbles"] = c in a) || (d.setAttribute(c, "t"), k[b + "Bubbles"] = d.attributes[c].expando === !1); d = null }(); var X = /^(?:input|select|textarea)$/i, Y = /^key/, Z = /^(?:mouse|pointer|contextmenu)|click/, $ = /^(?:focusinfocus|focusoutblur)$/, _ = /^([^.]*)(?:\.(.+)|)$/; function ab() { return !0 } function bb() { return !1 } function cb() { try { return y.activeElement } catch (a) { } } m.event = { global: {}, add: function (a, b, c, d, e) { var f, g, h, i, j, k, l, n, o, p, q, r = m._data(a); if (r) { c.handler && (i = c, c = i.handler, e = i.selector), c.guid || (c.guid = m.guid++), (g = r.events) || (g = r.events = {}), (k = r.handle) || (k = r.handle = function (a) { return typeof m === K || a && m.event.triggered === a.type ? void 0 : m.event.dispatch.apply(k.elem, arguments) }, k.elem = a), b = (b || "").match(E) || [""], h = b.length; while (h--) f = _.exec(b[h]) || [], o = q = f[1], p = (f[2] || "").split(".").sort(), o && (j = m.event.special[o] || {}, o = (e ? j.delegateType : j.bindType) || o, j = m.event.special[o] || {}, l = m.extend({ type: o, origType: q, data: d, handler: c, guid: c.guid, selector: e, needsContext: e && m.expr.match.needsContext.test(e), namespace: p.join(".") }, i), (n = g[o]) || (n = g[o] = [], n.delegateCount = 0, j.setup && j.setup.call(a, d, p, k) !== !1 || (a.addEventListener ? a.addEventListener(o, k, !1) : a.attachEvent && a.attachEvent("on" + o, k))), j.add && (j.add.call(a, l), l.handler.guid || (l.handler.guid = c.guid)), e ? n.splice(n.delegateCount++, 0, l) : n.push(l), m.event.global[o] = !0); a = null } }, remove: function (a, b, c, d, e) { var f, g, h, i, j, k, l, n, o, p, q, r = m.hasData(a) && m._data(a); if (r && (k = r.events)) { b = (b || "").match(E) || [""], j = b.length; while (j--) if (h = _.exec(b[j]) || [], o = q = h[1], p = (h[2] || "").split(".").sort(), o) { l = m.event.special[o] || {}, o = (d ? l.delegateType : l.bindType) || o, n = k[o] || [], h = h[2] && new RegExp("(^|\\.)" + p.join("\\.(?:.*\\.|)") + "(\\.|$)"), i = f = n.length; while (f--) g = n[f], !e && q !== g.origType || c && c.guid !== g.guid || h && !h.test(g.namespace) || d && d !== g.selector && ("**" !== d || !g.selector) || (n.splice(f, 1), g.selector && n.delegateCount-- , l.remove && l.remove.call(a, g)); i && !n.length && (l.teardown && l.teardown.call(a, p, r.handle) !== !1 || m.removeEvent(a, o, r.handle), delete k[o]) } else for (o in k) m.event.remove(a, o + b[j], c, d, !0); m.isEmptyObject(k) && (delete r.handle, m._removeData(a, "events")) } }, trigger: function (b, c, d, e) { var f, g, h, i, k, l, n, o = [d || y], p = j.call(b, "type") ? b.type : b, q = j.call(b, "namespace") ? b.namespace.split(".") : []; if (h = l = d = d || y, 3 !== d.nodeType && 8 !== d.nodeType && !$.test(p + m.event.triggered) && (p.indexOf(".") >= 0 && (q = p.split("."), p = q.shift(), q.sort()), g = p.indexOf(":") < 0 && "on" + p, b = b[m.expando] ? b : new m.Event(p, "object" == typeof b && b), b.isTrigger = e ? 2 : 3, b.namespace = q.join("."), b.namespace_re = b.namespace ? new RegExp("(^|\\.)" + q.join("\\.(?:.*\\.|)") + "(\\.|$)") : null, b.result = void 0, b.target || (b.target = d), c = null == c ? [b] : m.makeArray(c, [b]), k = m.event.special[p] || {}, e || !k.trigger || k.trigger.apply(d, c) !== !1)) { if (!e && !k.noBubble && !m.isWindow(d)) { for (i = k.delegateType || p, $.test(i + p) || (h = h.parentNode); h; h = h.parentNode)o.push(h), l = h; l === (d.ownerDocument || y) && o.push(l.defaultView || l.parentWindow || a) } n = 0; while ((h = o[n++]) && !b.isPropagationStopped()) b.type = n > 1 ? i : k.bindType || p, f = (m._data(h, "events") || {})[b.type] && m._data(h, "handle"), f && f.apply(h, c), f = g && h[g], f && f.apply && m.acceptData(h) && (b.result = f.apply(h, c), b.result === !1 && b.preventDefault()); if (b.type = p, !e && !b.isDefaultPrevented() && (!k._default || k._default.apply(o.pop(), c) === !1) && m.acceptData(d) && g && d[p] && !m.isWindow(d)) { l = d[g], l && (d[g] = null), m.event.triggered = p; try { d[p]() } catch (r) { } m.event.triggered = void 0, l && (d[g] = l) } return b.result } }, dispatch: function (a) { a = m.event.fix(a); var b, c, e, f, g, h = [], i = d.call(arguments), j = (m._data(this, "events") || {})[a.type] || [], k = m.event.special[a.type] || {}; if (i[0] = a, a.delegateTarget = this, !k.preDispatch || k.preDispatch.call(this, a) !== !1) { h = m.event.handlers.call(this, a, j), b = 0; while ((f = h[b++]) && !a.isPropagationStopped()) { a.currentTarget = f.elem, g = 0; while ((e = f.handlers[g++]) && !a.isImmediatePropagationStopped()) (!a.namespace_re || a.namespace_re.test(e.namespace)) && (a.handleObj = e, a.data = e.data, c = ((m.event.special[e.origType] || {}).handle || e.handler).apply(f.elem, i), void 0 !== c && (a.result = c) === !1 && (a.preventDefault(), a.stopPropagation())) } return k.postDispatch && k.postDispatch.call(this, a), a.result } }, handlers: function (a, b) { var c, d, e, f, g = [], h = b.delegateCount, i = a.target; if (h && i.nodeType && (!a.button || "click" !== a.type)) for (; i != this; i = i.parentNode || this)if (1 === i.nodeType && (i.disabled !== !0 || "click" !== a.type)) { for (e = [], f = 0; h > f; f++)d = b[f], c = d.selector + " ", void 0 === e[c] && (e[c] = d.needsContext ? m(c, this).index(i) >= 0 : m.find(c, this, null, [i]).length), e[c] && e.push(d); e.length && g.push({ elem: i, handlers: e }) } return h < b.length && g.push({ elem: this, handlers: b.slice(h) }), g }, fix: function (a) { if (a[m.expando]) return a; var b, c, d, e = a.type, f = a, g = this.fixHooks[e]; g || (this.fixHooks[e] = g = Z.test(e) ? this.mouseHooks : Y.test(e) ? this.keyHooks : {}), d = g.props ? this.props.concat(g.props) : this.props, a = new m.Event(f), b = d.length; while (b--) c = d[b], a[c] = f[c]; return a.target || (a.target = f.srcElement || y), 3 === a.target.nodeType && (a.target = a.target.parentNode), a.metaKey = !!a.metaKey, g.filter ? g.filter(a, f) : a }, props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), fixHooks: {}, keyHooks: { props: "char charCode key keyCode".split(" "), filter: function (a, b) { return null == a.which && (a.which = null != b.charCode ? b.charCode : b.keyCode), a } }, mouseHooks: { props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), filter: function (a, b) { var c, d, e, f = b.button, g = b.fromElement; return null == a.pageX && null != b.clientX && (d = a.target.ownerDocument || y, e = d.documentElement, c = d.body, a.pageX = b.clientX + (e && e.scrollLeft || c && c.scrollLeft || 0) - (e && e.clientLeft || c && c.clientLeft || 0), a.pageY = b.clientY + (e && e.scrollTop || c && c.scrollTop || 0) - (e && e.clientTop || c && c.clientTop || 0)), !a.relatedTarget && g && (a.relatedTarget = g === a.target ? b.toElement : g), a.which || void 0 === f || (a.which = 1 & f ? 1 : 2 & f ? 3 : 4 & f ? 2 : 0), a } }, special: { load: { noBubble: !0 }, focus: { trigger: function () { if (this !== cb() && this.focus) try { return this.focus(), !1 } catch (a) { } }, delegateType: "focusin" }, blur: { trigger: function () { return this === cb() && this.blur ? (this.blur(), !1) : void 0 }, delegateType: "focusout" }, click: { trigger: function () { return m.nodeName(this, "input") && "checkbox" === this.type && this.click ? (this.click(), !1) : void 0 }, _default: function (a) { return m.nodeName(a.target, "a") } }, beforeunload: { postDispatch: function (a) { void 0 !== a.result && a.originalEvent && (a.originalEvent.returnValue = a.result) } } }, simulate: function (a, b, c, d) { var e = m.extend(new m.Event, c, { type: a, isSimulated: !0, originalEvent: {} }); d ? m.event.trigger(e, null, b) : m.event.dispatch.call(b, e), e.isDefaultPrevented() && c.preventDefault() } }, m.removeEvent = y.removeEventListener ? function (a, b, c) { a.removeEventListener && a.removeEventListener(b, c, !1) } : function (a, b, c) { var d = "on" + b; a.detachEvent && (typeof a[d] === K && (a[d] = null), a.detachEvent(d, c)) }, m.Event = function (a, b) { return this instanceof m.Event ? (a && a.type ? (this.originalEvent = a, this.type = a.type, this.isDefaultPrevented = a.defaultPrevented || void 0 === a.defaultPrevented && a.returnValue === !1 ? ab : bb) : this.type = a, b && m.extend(this, b), this.timeStamp = a && a.timeStamp || m.now(), void (this[m.expando] = !0)) : new m.Event(a, b) }, m.Event.prototype = { isDefaultPrevented: bb, isPropagationStopped: bb, isImmediatePropagationStopped: bb, preventDefault: function () { var a = this.originalEvent; this.isDefaultPrevented = ab, a && (a.preventDefault ? a.preventDefault() : a.returnValue = !1) }, stopPropagation: function () { var a = this.originalEvent; this.isPropagationStopped = ab, a && (a.stopPropagation && a.stopPropagation(), a.cancelBubble = !0) }, stopImmediatePropagation: function () { var a = this.originalEvent; this.isImmediatePropagationStopped = ab, a && a.stopImmediatePropagation && a.stopImmediatePropagation(), this.stopPropagation() } }, m.each({ mouseenter: "mouseover", mouseleave: "mouseout", pointerenter: "pointerover", pointerleave: "pointerout" }, function (a, b) { m.event.special[a] = { delegateType: b, bindType: b, handle: function (a) { var c, d = this, e = a.relatedTarget, f = a.handleObj; return (!e || e !== d && !m.contains(d, e)) && (a.type = f.origType, c = f.handler.apply(this, arguments), a.type = b), c } } }), k.submitBubbles || (m.event.special.submit = { setup: function () { return m.nodeName(this, "form") ? !1 : void m.event.add(this, "click._submit keypress._submit", function (a) { var b = a.target, c = m.nodeName(b, "input") || m.nodeName(b, "button") ? b.form : void 0; c && !m._data(c, "submitBubbles") && (m.event.add(c, "submit._submit", function (a) { a._submit_bubble = !0 }), m._data(c, "submitBubbles", !0)) }) }, postDispatch: function (a) { a._submit_bubble && (delete a._submit_bubble, this.parentNode && !a.isTrigger && m.event.simulate("submit", this.parentNode, a, !0)) }, teardown: function () { return m.nodeName(this, "form") ? !1 : void m.event.remove(this, "._submit") } }), k.changeBubbles || (m.event.special.change = { setup: function () { return X.test(this.nodeName) ? (("checkbox" === this.type || "radio" === this.type) && (m.event.add(this, "propertychange._change", function (a) { "checked" === a.originalEvent.propertyName && (this._just_changed = !0) }), m.event.add(this, "click._change", function (a) { this._just_changed && !a.isTrigger && (this._just_changed = !1), m.event.simulate("change", this, a, !0) })), !1) : void m.event.add(this, "beforeactivate._change", function (a) { var b = a.target; X.test(b.nodeName) && !m._data(b, "changeBubbles") && (m.event.add(b, "change._change", function (a) { !this.parentNode || a.isSimulated || a.isTrigger || m.event.simulate("change", this.parentNode, a, !0) }), m._data(b, "changeBubbles", !0)) }) }, handle: function (a) { var b = a.target; return this !== b || a.isSimulated || a.isTrigger || "radio" !== b.type && "checkbox" !== b.type ? a.handleObj.handler.apply(this, arguments) : void 0 }, teardown: function () { return m.event.remove(this, "._change"), !X.test(this.nodeName) } }), k.focusinBubbles || m.each({ focus: "focusin", blur: "focusout" }, function (a, b) { var c = function (a) { m.event.simulate(b, a.target, m.event.fix(a), !0) }; m.event.special[b] = { setup: function () { var d = this.ownerDocument || this, e = m._data(d, b); e || d.addEventListener(a, c, !0), m._data(d, b, (e || 0) + 1) }, teardown: function () { var d = this.ownerDocument || this, e = m._data(d, b) - 1; e ? m._data(d, b, e) : (d.removeEventListener(a, c, !0), m._removeData(d, b)) } } }), m.fn.extend({ on: function (a, b, c, d, e) { var f, g; if ("object" == typeof a) { "string" != typeof b && (c = c || b, b = void 0); for (f in a) this.on(f, b, c, a[f], e); return this } if (null == c && null == d ? (d = b, c = b = void 0) : null == d && ("string" == typeof b ? (d = c, c = void 0) : (d = c, c = b, b = void 0)), d === !1) d = bb; else if (!d) return this; return 1 === e && (g = d, d = function (a) { return m().off(a), g.apply(this, arguments) }, d.guid = g.guid || (g.guid = m.guid++)), this.each(function () { m.event.add(this, a, d, c, b) }) }, one: function (a, b, c, d) { return this.on(a, b, c, d, 1) }, off: function (a, b, c) { var d, e; if (a && a.preventDefault && a.handleObj) return d = a.handleObj, m(a.delegateTarget).off(d.namespace ? d.origType + "." + d.namespace : d.origType, d.selector, d.handler), this; if ("object" == typeof a) { for (e in a) this.off(e, b, a[e]); return this } return (b === !1 || "function" == typeof b) && (c = b, b = void 0), c === !1 && (c = bb), this.each(function () { m.event.remove(this, a, c, b) }) }, trigger: function (a, b) { return this.each(function () { m.event.trigger(a, b, this) }) }, triggerHandler: function (a, b) { var c = this[0]; return c ? m.event.trigger(a, b, c, !0) : void 0 } }); function db(a) { var b = eb.split("|"), c = a.createDocumentFragment(); if (c.createElement) while (b.length) c.createElement(b.pop()); return c } var eb = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", fb = / jQuery\d+="(?:null|\d+)"/g, gb = new RegExp("<(?:" + eb + ")[\\s/>]", "i"), hb = /^\s+/, ib = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, jb = /<([\w:]+)/, kb = /\s*$/g, rb = { option: [1, ""], legend: [1, ""], area: [1, ""], param: [1, ""], thead: [1, "
Mỗi không gian bếp đều mang những đặc điểm riêng về diện tích, phong cách thiết kế và thói quen sử dụng. Việc lựa chọn chậu rửa bát phù hợp không chỉ mang lại tiện nghi, mà còn góp phần làm tăng tính thẩm mỹ và hiệu suất sử dụng của khu vực nấu nướng.
Một chiếc chậu rửa phù hợp sẽ giúp bạn rút ngắn thời gian sơ chế – rửa dọn, giữ vệ sinh cho mặt bếp, và thậm chí tăng cảm hứng nấu nướng mỗi ngày. Đừng chỉ nhìn vào giá hay mẫu mã – hãy lựa chọn dựa trên không gian thực tế, tần suất sử dụng, thói quen nấu ăn và nhu cầu dài hạn.
💡 Bạn có thể gửi mình hình ảnh gian bếp hoặc bản vẽ mặt bằng, mình sẽ gợi ý model + kích thước + kiểu lắp đặt + thương hiệu phù hợp. Mọi thứ sẽ đơn giản hơn khi có chuyên gia hỗ trợ bạn, đúng không?
Hướng dẫn bịt khe hở giữa chậu rửa bát và bàn đá
Để bịt kín khe hở giữa chậu rửa bát và bàn đá, bạn có thể làm theo hướng dẫn sau để đảm bảo chống thấm nước, ngăn bụi bẩn và tăng tính thẩm mỹ:
Vật liệu cần chuẩn bị:
Keo silicon chống thấm (loại dùng cho nhà bếp, có khả năng kháng nấm mốc – nên chọn màu trắng hoặc trong suốt)
Súng bắn keo silicon
Dao rọc giấy / dao trổ
Băng keo giấy (tùy chọn – để dán định hình đường keo)
Khăn sạch hoặc giấy lau
Dung dịch xà phòng / cồn lau (để làm sạch)
Các bước thực hiện:
✅ Bước 1: Vệ sinh khe hở
Dùng khăn ẩm lau sạch bụi bẩn, dầu mỡ và nước xung quanh mép chậu rửa và mặt đá.
Đảm bảo khe hở khô ráo hoàn toàn trước khi bơm keo.
✅ Bước 2: Dán băng keo định hình (nếu cần)
Dán băng keo giấy dọc theo 2 mép khe hở để đường keo đều, đẹp và không bị lem.
✅ Bước 3: Bơm keo silicon
Cắt đầu tuýp keo nghiêng khoảng 45°, gắn vào súng bắn keo.
Bơm đều tay một đường keo chạy dọc khe hở giữa chậu rửa và mặt đá.
✅ Bước 4: Miết keo
Dùng ngón tay nhúng nước xà phòng (hoặc dụng cụ miết silicon) để miết nhẹ đường keo, giúp keo bám chặt và phẳng đẹp.
Gỡ băng keo giấy ngay sau khi miết (trước khi keo khô).
✅ Bước 5: Chờ keo khô
Để yên trong khoảng 4–6 giờ (tùy loại keo), tránh tiếp xúc với nước.
Sau 24 giờ keo sẽ khô hoàn toàn và phát huy hiệu quả chống thấm tốt nhất.
✅ Lưu ý:
Không dùng keo dán gạch, xi măng trắng hoặc keo không chuyên dụng vì dễ nứt, bong, thấm nước sau một thời gian.
Nếu khe hở quá lớn (>5mm), có thể chèn thêm xốp kín khe trước rồi mới bơm keo.
Dung dịch thông tắc chậu rửa bát
Dưới đây là các loại dung dịch thông tắc chậu rửa bát hiệu quả, dễ tìm và phổ biến hiện nay, cùng với cách sử dụng an toàn:
✅ 1. Dung dịch thông cống chuyên dụng (mua sẵn)
Các sản phẩm bán sẵn có hiệu quả mạnh, phù hợp với chậu bị nghẹt do dầu mỡ, cặn thực phẩm, tóc, xà phòng...
Một số thương hiệu phổ biến:
Sifa (Việt Nam)
Hando
Gift
Drano (Mỹ)
EcoClean, Sumo, Thái Dương
Cách dùng (đọc kỹ hướng dẫn trên bao bì):
Đổ trực tiếp dung dịch vào miệng ống thoát nước/chậu.
Để yên khoảng 30 phút đến vài giờ (tùy sản phẩm).
Xả lại bằng nước nóng hoặc nước sạch để cuốn trôi chất thải.
✅ 2. Tự pha dung dịch bằng nguyên liệu tại nhà (tắc nhẹ)
Cách 1: Baking soda + giấm + nước nóng
Đổ 1/2 cốc baking soda vào ống thoát nước.
Tiếp theo đổ 1 cốc giấm trắng.
Đợi khoảng 15–30 phút, sau đó xả bằng nước nóng già.
➡️ Hiệu quả với tắc nhẹ do mỡ, bám bẩn nhẹ.
Cách 2: Nước rửa bát + nước nóng
Pha loãng nước rửa bát với nước nóng rồi đổ vào chậu.
Chờ 15–20 phút, giúp làm tan mỡ bám trong ống.
➡️ Cách này an toàn, dễ thực hiện thường xuyên để phòng tắc.
✅ Lưu ý an toàn khi dùng dung dịch thông tắc:
Đeo găng tay và khẩu trang khi dùng hóa chất mạnh.
Tránh hít hơi, tránh để dính vào da và mắt.
Không trộn các hóa chất khác nhau để tránh phản ứng nguy hiểm.
Hướng dẫn xử lý chậu rửa bát tắc nghẽn nặng hoặc chảy chậm?
Tình trạng tắc nghẽn chậu rửa bát có thể chia thành 2 mức:
✅ 1. Bị chảy chậm (tắc nhẹ)
👉 Dấu hiệu: Nước vẫn thoát nhưng chậm, có thể có mùi hôi nhẹ, nước ứ lại rồi rút từ từ.
Cách xử lý:
Dùng dung dịch thông tắc nhẹ: Baking soda + giấm + nước nóng (như đã hướng dẫn ở trên).
Dung dịch thông tắc hóa chất (loại nhẹ): Sifa, Gift, Hando...
Xả nước nóng thường xuyên: Giúp làm tan mỡ, ngăn mảng bám.
Tháo ống chữ U (nếu có): Kiểm tra cặn bẩn hoặc vật thể rơi vào.
➡️ Hiệu quả với trường hợp nghẹt do dầu mỡ, cặn thức ăn nhỏ.
✅ 2. Bị nghẹt hoàn toàn (tắc nặng)
👉 Dấu hiệu: Nước không thoát, ứ đọng lâu, có thể trào ngược, dùng hóa chất không hiệu quả.
Cách xử lý:
Dùng pittong (ống thụt cao su)
Đặt miệng pittong kín miệng ống xả.
Nhấn – kéo liên tục để tạo áp lực đẩy chất tắc xuống.
Dùng dây lò xo (dây thông cống)
Luồn dây vào ống thoát, xoay để móc hoặc đẩy chất tắc.
Có thể mua dây lò xo mini ở tiệm điện nước (~50–100k).
Tháo ống xả để kiểm tra
Nếu là ống chữ U hoặc ống mềm, tháo ra vệ sinh sạch sẽ.
Đeo găng tay, có chậu hứng nước khi tháo.
Gọi thợ chuyên nghiệp (nếu đã thử các cách trên không hiệu quả hoặc nhà dùng ống dẫn âm tường dài, phức tạp).
🔧 Gợi ý phòng tránh sau khi thông tắc:
Dùng lưới lọc rác chậu rửa.
Không đổ dầu ăn, mỡ thừa vào bồn rửa.
Đổ nước nóng 1 lần/tuần để làm sạch ống.
Kinh nghiệm mua chậu rửa bát
Khi mua chậu rửa bát, bạn nên cân nhắc kỹ lưỡng cả về kích thước, chất liệu, kiểu dáng, tính năng và phù hợp với không gian bếp. Dưới đây là một số kinh nghiệm quan trọng để chọn được chậu rửa bát tốt, bền và tiện dụng:
✅ 1. Chọn đúng kích thước và kiểu dáng
Số hộc:
1 hộc: phù hợp bếp nhỏ, người ít nấu ăn.
2 hộc cân: tiện rửa – tráng cùng lúc, rất phổ biến.
2 hộc lệch (1 to – 1 nhỏ): linh hoạt hơn, tiết kiệm không gian.
Kích thước phổ biến:
Dài 70–90 cm, rộng 40–50 cm, sâu 20–25 cm.
Chậu càng sâu càng hạn chế bắn nước.
✅ 2. Chất liệu – độ bền và dễ vệ sinh
Inox 304 (cao cấp):
Chống gỉ tuyệt đối, sáng đẹp, bền, không bị ăn mòn.
Giá cao nhưng xứng đáng.
Inox 201, 430:
Rẻ hơn, nhưng dễ bị gỉ sét nếu không bảo quản tốt.
Đá nhân tạo / granite composite:
Sang trọng, chắc chắn, ít trầy xước, cách âm tốt.
Nặng và giá cao hơn.
✅ 3. Lựa chọn kiểu lắp đặt
Lắp âm bàn (âm đá):
Thẩm mỹ cao, dễ lau dọn mặt bếp.
Lắp dương bàn:
Phổ biến, dễ thay thế, lắp đặt đơn giản hơn.
✅ 4. Phụ kiện đi kèm
Xem có kèm rổ rửa, ống xả chống mùi, bộ lọc rác, bàn chờ để bát, thớt, nắp đậy xả đáy không.
Nên chọn chậu có xiphong chống mùi, chống trào ngược, dễ tháo vệ sinh.
Xem kỹ vị trí lỗ xả – thoát nước có dễ lắp với hệ thống nhà bạn không.
Bạn đang làm bếp mới hay thay chậu cũ? Mình có thể gợi ý chậu phù hợp với kích thước mặt đá hoặc ngân sách nếu bạn cần.
Cách chế khung chân cho chậu rửa bát
Việc chế khung chân cho chậu rửa bát là giải pháp tiết kiệm và linh hoạt nếu bạn không gắn chậu vào tủ bếp. Dưới đây là hướng dẫn cách làm khung chân đơn giản, chắc chắn và phù hợp với các loại chậu inox có và không có chân sẵn:
✅ 1. Chuẩn bị vật liệu và dụng cụ
➤ Vật liệu:
Sắt hộp vuông (20x20mm hoặc 25x25mm – chống gỉ, chịu lực tốt)
Mặt đỡ: có thể dùng tấm inox, ván nhựa hoặc không nếu chậu có vành gác
Ốc vít, bản lề sắt (nếu cần tháo rời)
Sơn chống gỉ + sơn phủ (tuỳ chọn)
➤ Dụng cụ:
Máy cắt sắt hoặc cưa tay
Máy hàn điện (hoặc thuê hàn)
Máy khoan, thước đo, bút đánh dấu
✅ 2. Thiết kế khung chân (kích thước phổ biến)
Giả sử chậu rửa 2 hộc thông dụng:
Chiều dài khung: 80–90 cm
Chiều rộng khung: 45–50 cm
Chiều cao: 75–80 cm (tính cả lòng chậu)
👉 Có thể điều chỉnh theo kích thước chậu của bạn.
Cấu tạo khung gồm:
4 chân đứng (sắt hộp)
2 thanh đỡ ngang phía trên (dọc theo chiều dài chậu)
2 thanh ngang phía trước – sau (tạo mặt khung đỡ chậu)
Thanh giằng dưới (tăng cứng, chống lắc – nên làm thêm)
✅ 3. Các bước thực hiện
🔧 Bước 1: Đo kích thước chậu rửa
Đo đúng kích thước đáy chậu, tính thêm phần vành gác mép nếu có.
🔧 Bước 2: Cắt sắt theo số đo
Cắt 4 chân và các thanh ngang đúng kích thước bạn cần.
🔧 Bước 3: Hàn khung
Hàn 4 chân với các thanh ngang tạo thành khung hình chữ nhật.
Tạo thêm thanh giằng phía dưới để tăng độ cứng.
🔧 Bước 4: Lắp chậu và xử lý chống gỉ
Đặt thử chậu lên, căn chỉnh cho vừa vặn.
Sơn chống gỉ khung chân, để khô.
🔧 Bước 5: Gắn cố định (nếu cần)
Gắn vít cố định hoặc hàn thêm móc giữ chậu nếu bạn không muốn chậu xê dịch.
Gắn ống xả phù hợp, đảm bảo không cấn khung.
✅ Gợi ý cải tiến (nếu muốn):
Lắp thêm kệ dưới để đồ, làm bằng tấm inox hoặc nan sắt.
Gắn chân tăng chỉnh độ cao để dễ cân bằng mặt sàn không bằng phẳng.
Có thể lót cao su vào điểm tiếp xúc để chống rung/ồn.
Chậu rửa bát loại nào tốt nhất ?
Việc chọn chậu rửa bát tốt nhất phụ thuộc vào nhu cầu sử dụng, không gian bếp và ngân sách. Dưới đây là tổng hợp các loại chậu rửa bát tốt, bền, đáng mua nhất hiện nay theo từng phân khúc:
✅ 1. Phân theo chất liệu – loại nào tốt nhất?
🔹 Inox 304 (loại tốt nhất – phổ biến nhất)
Chống gỉ tuyệt đối, sáng đẹp, bền, dễ vệ sinh.
Độ dày tốt (≥ 0.8 mm), không bị móp méo.
Không ám mùi, phù hợp khí hậu Việt Nam.
👉 Thương hiệu nên chọn: Teka, Malloca, Gorlde, Konox, Sơn Hà Premium, Haco, Carysil inox
🔹 Chậu đá granite composite
Cứng chắc, sang trọng, chống xước, chống bám bẩn tốt.
Cách âm và chịu nhiệt tốt hơn inox.
Đa dạng màu sắc: đen, xám, kem...
👉 Thương hiệu nên chọn: Carysil (Đức – rất nổi tiếng), Blanco, Teka, Malloca, Sobisung
⚠️ Lưu ý: Giá cao hơn inox, khá nặng, yêu cầu lắp kỹ.
✅ 2. Phân theo thiết kế – nên chọn loại nào?
Loại chậu
Ưu điểm chính
Phù hợp
1 hộc
Nhỏ gọn, dễ lắp, rẻ
Bếp nhỏ, người ít nấu
2 hộc cân
Tiện tách rửa – tráng, phổ biến
Gia đình 2–4 người
2 hộc lệch
Rửa linh hoạt, thoát nước nhanh
Người nấu thường xuyên
Có bàn chờ
Đặt xoong, thực phẩm tiện lợi
Bếp rộng
Lắp âm bàn đá
Thẩm mỹ cao, dễ lau dọn mặt bếp
Nhà bếp hiện đại
✅ Tóm tắt – Nên chọn chậu nào?
Nhu cầu
Gợi ý
Muốn bền, đẹp, dễ vệ sinh, giá vừa
Inox 304 – 2 hộc – lắp dương
Muốn thẩm mỹ, cao cấp
Chậu đá granite (Carysil, Blanco)
Bếp nhỏ, ít nấu ăn
1 hộc hoặc 2 hộc nhỏ (Sơn Hà, Haco)
Thích phụ kiện đi kèm (rổ, khay, thớt...)
Chọn dòng cao cấp của Konox, Malloca
Bạn đang muốn mua chậu cho bếp mới, thay chậu cũ hay nâng cấp loại tốt hơn? Mình có thể gợi ý theo diện tích mặt đá, màu bếp hoặc tủ bạn đang dùng.
Chậu rửa bát nên đặt âm hay dương ?
Việc chọn chậu rửa bát đặt âm hay dương phụ thuộc vào thẩm mỹ, độ tiện lợi, ngân sách và kiểu tủ bếp. Dưới đây là so sánh chi tiết giữa chậu âm và chậu dương, giúp bạn đưa ra quyết định dễ dàng hơn:
✅ 1. Chậu đặt dương (lắp nổi trên mặt bàn đá)
✅ Ưu điểm:
Dễ lắp đặt, không cần cắt đá phức tạp.
Chi phí rẻ hơn chậu âm.
Phù hợp với hầu hết loại tủ bếp phổ thông.
Dễ thay thế nếu muốn đổi chậu sau này.
⚠️ Nhược điểm:
Gờ chậu nổi lên, có thể gây vướng khi lau mặt bàn.
Thẩm mỹ kém hơn chậu âm (ít liền lạc với bàn bếp).
👉 Phù hợp với: Gia đình phổ thông, không yêu cầu cao về thẩm mỹ, cần lắp nhanh – dễ bảo trì.
✅ 2. Chậu đặt âm (gắn lọt dưới mặt bàn đá)
✅ Ưu điểm:
Thẩm mỹ cao, tạo cảm giác liền khối – hiện đại.
Lau mặt bàn sạch nhanh (dồn nước/rác thẳng xuống chậu).
Phù hợp với bếp cao cấp, sang trọng.
⚠️ Nhược điểm:
Lắp đặt phức tạp hơn: cần kỹ thuật cắt đá chuẩn, keo chuyên dụng.
Chi phí cao hơn: công lắp + chống thấm kỹ.
Khó thay thế khi cần đổi chậu khác.
👉 Phù hợp với: Nhà bếp hiện đại, mặt bàn đá cao cấp, yêu cầu tính thẩm mỹ và tiện nghi cao.
✅ Tóm lại – Nên chọn chậu âm hay dương?
Tiêu chí
Chậu dương
Chậu âm
Lắp đặt
Dễ, nhanh
Khó, cần chuyên môn
Chi phí
Rẻ hơn
Cao hơn
Thẩm mỹ
Trung bình
Rất cao
Dễ vệ sinh mặt bàn
Kém hơn
Tốt hơn
Thay thế chậu sau này
Dễ
Khó
🟨 Kinh nghiệm chọn nhanh:
👉 Nếu bạn ưu tiên đơn giản, tiết kiệm:Chọn chậu dương.
👉 Nếu bạn đang làm bếp mới, muốn đẹp, hiện đại:Chọn chậu âm.
👉 Nếu bếp đã có mặt đá cắt sẵn: Chọn theo kích thước và kiểu chậu phù hợp với lỗ đá đã có.
Cách lắp chậu rửa bát âm bàn đá
Lắp chậu rửa bát âm bàn đá đòi hỏi độ chính xác và kỹ thuật cao hơn chậu dương vì phải gắn chậu lọt xuống dưới mặt đá, đảm bảo kín nước, chắc chắn và thẩm mỹ. Dưới đây là hướng dẫn chi tiết từng bước, bạn có thể tự làm nếu có công cụ hoặc thuê thợ sẽ dễ hơn.
✅ Chuẩn bị trước khi lắp
➤ Dụng cụ – vật liệu cần có:
Chậu rửa bát âm (kèm móc giữ nếu có)
Keo dán đá chuyên dụng / keo silicone chống nước
Băng keo hai mặt (tuỳ chọn, để định vị trước)
Bộ xi phông – ống xả chậu
Máy khoan, tua vít, ke cắt đá (nếu chưa khoét đá)
✅ Các bước lắp chậu rửa bát âm bàn đá
🔧 Bước 1: Xác định vị trí lắp và đo kích thước
Đặt chậu úp ngược lên mặt bàn đá để lấy dấu mép trong.
Khoét lỗ nhỏ hơn miệng chậu, sao cho chậu sẽ lọt xuống dưới nhưng phần mép vẫn được đỡ bởi ke đá và keo.
⚠️ Nên khoét nhỏ hơn 1–1.5 cm mỗi cạnh so với miệng chậu để tạo gờ tì.
🔧 Bước 2: Làm sạch bề mặt đá và viền chậu
Lau khô hoàn toàn mặt dưới bàn đá và viền chậu.
Đảm bảo không có bụi bẩn, dầu mỡ để keo bám chắc.
🔧 Bước 3: Bơm keo và cố định chậu
Bơm keo silicone (hoặc keo dán đá chuyên dụng) quanh mép lỗ khoét dưới mặt đá.
Đặt chậu từ phía dưới lên sao cho mép chậu tì đều vào mặt đá.
👉 Có 2 cách cố định:
Dùng móc giữ bằng kim loại (nếu chậu có): Gắn vít móc siết chặt.
Dùng gỗ chống tạm phía dưới + keo: Chống nhẹ trong 6–12 tiếng để keo khô hoàn toàn.
🔧 Bước 4: Lắp bộ xi phông, ống xả
Gắn ống xả theo hướng dẫn từng loại chậu.
Kiểm tra các khớp nối, lắp gioăng cao su đúng vị trí.
Có thể dùng băng tan để quấn chống rò rỉ ren.
🔧 Bước 5: Kiểm tra hoàn thiện
Sau khi keo khô (thường 6–12 giờ), mở nước thử xả, kiểm tra rò rỉ, độ kín.
Lau lại keo thừa nếu có.
Kiểm tra độ chắc chắn khi ấn nhẹ quanh viền chậu.
✅ Lưu ý quan trọng
Chỉ dùng keo chuyên dụng chống thấm tốt, không dùng keo thường (dễ bong).
Nếu dùng đá nhân tạo hoặc đá mỏng, nên có khung đỡ bên dưới.
Không đặt vật nặng lên chậu trong 24h sau lắp.
Nếu bạn cần, mình có thể gửi bản vẽ sơ đồ lắp đặt đơn giản hoặc hướng dẫn thêm theo mẫu chậu cụ thể bạn đang dùng. Bạn muốn lắp loại chậu 1 hay 2 hộc?
Cách lắp xi phông chậu rửa bát
Việc lắp xi phông cho chậu rửa bát là bước quan trọng giúp đảm bảo thoát nước nhanh, không rò rỉ và ngăn mùi hôi từ ống cống. Dưới đây là hướng dẫn chi tiết cách lắp xi phông đúng chuẩn cho chậu rửa 1 hoặc 2 hộc.
✅ 1. Các bộ phận trong xi phông chậu rửa bát
Một bộ xi phông cơ bản thường gồm:
Phễu thoát nước (rốn xả): Gắn dưới đáy chậu.
Ống đứng (ống thẳng nối từ rốn xả)
Co chữ P (bẫy nước ngăn mùi) hoặc ống cong chữ S
Ống nối nhánh (nếu chậu 2 hộc)
Ống xả ra tường
Gioăng cao su, đai xiết, băng tan
⚠️ Với chậu đôi, thường có bộ chia T để gom nước từ 2 hộc.
✅ 2. Hướng dẫn lắp xi phông chậu rửa bát
🔧 Bước 1: Gắn phễu thoát (rốn xả) vào đáy chậu
Cho gioăng cao su vào giữa phễu thoát và đáy chậu.
Siết chặt bằng đai ốc từ dưới lên (tay hoặc tua vít).
Đảm bảo phễu xả khít và không rò nước.
🔧 Bước 2: Lắp ống đứng vào rốn xả
Cắm ống đứng vào phần dưới của rốn xả.
Gắn thêm gioăng cao su và siết vòng ren.
🔧 Bước 3: Lắp bẫy nước (ống cong chữ P hoặc S)
Gắn ống cong vào ống đứng vừa lắp.
Đảm bảo đúng chiều để giữ nước ngăn mùi.
🔧 Bước 4: Gắn ống nối (với chậu 2 hộc)
Dùng ống chữ T hoặc chữ Y để nối 2 nhánh xả vào 1 đường chung.
Gắn chặt và siết đai.
🔧 Bước 5: Nối ống xả ra tường
Gắn ống thoát chính từ bẫy nước ra đường ống âm tường.
Dùng băng tan quấn vào các ren nếu là khớp vặn để chống rò rỉ.
🔧 Bước 6: Kiểm tra hoàn thiện
Mở vòi xả nước thật mạnh.
Quan sát kỹ các khớp nối, đặc biệt ở phễu xả và co chữ P.
Nếu rò nước, tháo ra gắn lại, kiểm tra gioăng và ren.
✅ Mẹo chống mùi và thoát nước tốt
Luôn lắp đúng chiều bẫy nước (chữ P hoặc chữ U) – không được để ngược.
Không cắt ngắn ống quá sát, tránh nước chảy ngược hoặc đọng.
Thường xuyên kiểm tra và vệ sinh co chữ P để tránh tắc nghẽn.
Cách tẩy rửa chậu rửa bát inox
Để tẩy rửa và làm sạch chậu rửa bát inox hiệu quả, bạn nên sử dụng các nguyên liệu an toàn, dễ tìm, đồng thời bảo vệ bề mặt inox không bị xước hay xỉn màu. Dưới đây là hướng dẫn chi tiết từng bước:
✅ 1. Dụng cụ & nguyên liệu cần có
Nước rửa chén
Giấm trắng hoặc chanh tươi
Baking soda (muối nở)
Khăn mềm hoặc miếng bọt biển không xước
Bàn chải lông mềm (nếu cần)
Găng tay cao su (nếu da nhạy cảm)
✅ 2. Các bước tẩy rửa chậu rửa bát inox
🔹 Bước 1: Làm sạch cơ bản hằng ngày
Rửa chậu bằng nước ấm + nước rửa chén.
Dùng miếng bọt biển mềm lau đều theo chiều vân inox.
Rửa sạch lại bằng nước.
👉 Tần suất: Nên làm hàng ngày hoặc sau mỗi lần rửa nhiều dầu mỡ.
🔹 Bước 2: Khử mùi & tẩy ố bằng giấm + baking soda (1–2 lần/tuần)
✔️ Cách làm:
Rắc một lớp mỏng baking soda lên toàn bộ lòng chậu.
Xịt hoặc rưới giấm trắng lên. Hỗn hợp sẽ sủi bọt – tẩy sạch ố vàng & mảng bám.
Dùng khăn mềm hoặc bàn chải chà theo chiều vân inox.
Để khoảng 5–10 phút, rồi rửa sạch bằng nước ấm.
💡 Có thể thay giấm bằng chanh tươi cắt đôi – vừa chà vừa diệt khuẩn.
🔹 Bước 3: Lau khô và đánh bóng
Dùng khăn khô lau sạch nước.
Có thể nhỏ vài giọt dầu ăn hoặc dầu ô liu lên khăn rồi lau đều để tạo độ bóng và chống bám bẩn.
❌ Lưu ý – Tránh những sai lầm sau:
Không dùng miếng chà kim loại (gây xước, xỉn).
Không dùng chất tẩy có clo hoặc acid mạnh (ăn mòn inox).
Tránh để muối, nước mắm, hóa chất đọng lâu trong chậu (gây ăn mòn chậm).
Không để nước đọng lâu gây ố vết nước cứng (vôi hóa).
✅ Mẹo giữ chậu inox luôn sáng sạch
Thói quen
Lợi ích
Lau khô sau mỗi lần dùng
Tránh ố nước và cặn vôi
Vệ sinh bằng baking soda + giấm hàng tuần
Tẩy sạch ố, diệt khuẩn
Không đổ dầu mỡ trực tiếp vào chậu
Tránh tắc nghẽn và bám bẩn
Các kích thước chậu rửa bát
Kích thước chậu rửa bát sẽ phụ thuộc vào loại chậu, số hộc và không gian bếp của bạn. Dưới đây là các kích thước thông dụng cho các loại chậu rửa bát 1 hộc, 2 hộc và các loại chậu đặc biệt:
✅ 1. Chậu rửa bát 1 hộc
Loại chậu này thường được sử dụng cho các bếp nhỏ hoặc nhà bếp có không gian hạn chế.
Kích thước chuẩn:
Chiều dài: 45–55 cm
Chiều rộng: 40–50 cm
Chiều sâu: 15–20 cm
Ưu điểm:
Tiết kiệm diện tích
Dễ dàng lắp đặt trong các không gian bếp nhỏ
✅ 2. Chậu rửa bát 2 hộc
Chậu 2 hộc phổ biến và được sử dụng nhiều trong các bếp gia đình vì tính tiện dụng, giúp phân chia công việc rửa (rửa bát và rửa rau, thực phẩm).
Kích thước chuẩn:
Chiều dài: 75–80 cm
Chiều rộng: 40–50 cm
Chiều sâu: 18–20 cm (tùy theo mẫu)
Ưu điểm:
Rửa bát và thực phẩm cùng lúc
Phù hợp cho gia đình từ 2–4 người
✅ 3. Chậu rửa bát 3 hộc
Loại này ít phổ biến hơn nhưng vẫn được sử dụng trong các nhà bếp lớn, đặc biệt là trong các quán ăn, nhà hàng.
Kích thước chuẩn:
Chiều dài: 100–120 cm
Chiều rộng: 45–50 cm
Chiều sâu: 20 cm
Ưu điểm:
Phù hợp với không gian rộng lớn, yêu cầu xử lý nhiều công việc cùng lúc
✅ 4. Chậu rửa bát có bàn chờ (đặt âm hoặc dương)
Loại chậu này có thêm một bàn chờ phía bên cạnh, thuận tiện để đặt xoong nồi, thực phẩm hay rổ đựng.
Kích thước chuẩn:
Chiều dài: 80–100 cm
Chiều rộng: 50–60 cm
Chiều sâu: 20–25 cm (tùy theo thiết kế)
✅ 5. Chậu rửa bát âm bàn đá
Chậu này được lắp lọt vào mặt bàn đá, giúp thẩm mỹ bếp sang trọng hơn.
Kích thước chuẩn:
Chiều dài: 60–80 cm
Chiều rộng: 45–55 cm
Chiều sâu: 18–22 cm
✅ 6. Các yếu tố ảnh hưởng đến kích thước chậu rửa bát:
Kích thước tủ bếp: Chậu phải vừa vặn với không gian tủ bếp.
Loại mặt đá (bàn đá): Nếu bạn lắp âm, mặt đá cần có độ dày phù hợp với loại chậu.
Nhu cầu sử dụng: Chọn theo số lượng bát đĩa trong gia đình, mức độ sử dụng bếp và không gian bếp.
Tóm lại:
Bếp nhỏ hoặc ít sử dụng: Chọn chậu 1 hộc, chiều dài 45–55 cm.
Bếp gia đình tiêu chuẩn: Chọn chậu 2 hộc, chiều dài 75–80 cm.
Bếp lớn hoặc cần nhiều công năng: Chọn chậu 3 hộc hoặc chậu có bàn chờ.
Bạn đang cân nhắc kích thước cho bếp gia đình hay bếp nhà hàng? Cần thêm gợi ý nào không?
TỔNG ĐÀI BÁN HÀNG : 1800.1161 (8:00 - 21:00) - Miễn phí