obj1.listen(obj2, 'save', function(t) {
t.preventDefault()
})
obj2 = {
save: function save(a) {
var saveOrNot = !1;
this.trigger("save", {
preventDefault: function() {
saveOrNot = !0
}
});
console.log("prevent default after")
if (!saveOrNot) {
console.log("got excuted")
}
}
}
在我看来,触发线之后的行总是被执行,因为preventDefault()
没有立即执行。
但是"被执行了#34;消息不打印。触发事件时代码是否挂起?
答案 0 :(得分:0)
它没有被执行,因为每次运行preventDefault
功能时,您都会将saveOrNot
值设置为true
,但是当您检查此值时,它会&#39 ; s始终为false,因此控制台日志永远不会执行。
if (!saveOrNot) { // this is the line in scope => this is always false
console.log("got excuted")
}
如果您想将值条件更改为相反的状态,最好使用否定:
saveOrNot = !saveOrNot;
我会用以下方式重写你的代码:
obj1.listen(obj2, 'save', function(t) {
t.preventDefault()
})
obj2 = {
save: function save(a) {
var saveOrNot = 0;
this.trigger("save", {
preventDefault: function() {
saveOrNot = !saveOrNot;
}
});
console.log("prevent default after")
if (!saveOrNot) {
console.log("got excuted")
}
}
}