javascript - 满足条件时如何立即显示警报?
问题描述
我正在尝试在购物车中的总价格超过 100 美元时发出警报。
我使用了一个简单的 if 语句,当满足条件时,显示警报。下面是我在 HTML 中的代码(我正在修改 Shopify 的主题)。
<script>
function showAlert() { alert('You triggered an alert!'); }
</script>
{% if cart.total_price > 100 %}
<script>showAlert();</script>
{% endif%}
这很接近,但不是我想要的。它仅在我刷新页面后显示警报。我希望在购物车达到 100 美元时立即显示警报。所以,当我添加一个产品并且总价值超过 100 美元时,我希望立即显示警报。我该怎么做呢?
解决方案
浏览器以前支持的一种方法现在已弃用 Object.watch 可用于实现您的要求,但您可以使用以下多边形填充。
if (!Object.prototype.watch) {
Object.defineProperty(Object.prototype, "watch", {
enumerable: false
, configurable: true
, writable: false
, value: function (prop, handler) {
var
oldval = this[prop]
, newval = oldval
, getter = function () {
return newval;
}
, setter = function (val) {
oldval = newval;
return newval = handler.call(this, prop, oldval, val);
}
;
if (delete this[prop]) { // can't watch constants
Object.defineProperty(this, prop, {
get: getter
, set: setter
, enumerable: true
, configurable: true
});
}
}
});
}
var cart = {price: 40}
cart.watch('price', (name, prev, current) => {
if(current > 100) {
alert(`your price is ${current} dollars which is greater than 100`);
}
})
cart.price = 140
推荐阅读
- c# - 我的存储过程在调用时不起作用
- firebase - 本地写入带有附加侦听器的 Firebase RTDB 或 Firestore 是否需要读取操作?
- c++ - 显示固定大小小部件的网格,使其水平适合 QScrollArea
- android - 工人经理的自定义约束
- php - 使用钩子刷新 WordPress 永久链接
- security - FIWARE:物联网代理和上下文代理之间的身份验证
- php - 使用 laravel 5.7.* 数据透视表返回 null
- gremlin - step.map.PropertyMapStep 不能转换为 step.ByModulating
- php - laravel 中的关系数据库删除
- c# - 通过 TCP 接收数据:MemoryStream 包含比预期更多的数据