如果满足某些if
条件,我会有一小段代码可以执行某些操作。它不能正常工作,我无法弄清楚原因。代码有点冗长,请耐心等待。非常感谢您的帮助!
首先我的html中有一个按钮,当它点击它会触发功能
function coverCard() {
if (2 > 1) {
GodAn();
} else {
if (bbbbb === 0) {
do something
} else {
do sth
}
}
}
此功能将导致GodAn
功能显示如下
function GodAn() {
var a = 1
if (a < 2) {
document.getElementById("coverCard").onclick = Alert.render("do option 1 please")
bbbbb = 0;
} else {
document.getElementById("coverCard").onclick = Alert.render("do option 2 please")
bbbbb = 2;
}
}
最后,下面是定义对话框中显示内容的函数,以及单击ok
按钮时会发生什么
function CustomAlert() {
this.render = function (dialog) {
document.getElementById('dialogboxfoot').innerHTML = '<button onclick="Alert.ok()">ok</button>';
}
if (bbbbb === 0) {
this.ok = function () {
alert("do option1")
console.log(bbbbb)
}
}
else this.ok = function () {
alert("do option 2")
console.log(bbbbb)
}
}
var Alert = new CustomAlert();
我期望发生的是当单击html按钮时,对话框将显示"do option 1 please"
(它始终如此),然后提醒"do option1"
。但是,有时在CustomAlert
函数中,即使将全局变量"do option 2"
重置为bbbbb
,也会错误地触发0
警报。 (console.log
也确认bbbbb
为0
)。
我上传了原始的html文件,链接在这里:
https://wetransfer.com/downloads/313ba63c7a101f917cbc9e6f9a4c5ade20170226122032/43cedb
这真让我疯狂,所以请有人在这里说明一点?
这是我的代码的 https://jsfiddle.net/5bn0ux5k/ 在我看来,警报1或警报2是否被触发是一个纯粹的随机事件,而它预计会被设置为警报1(选项1)
答案 0 :(得分:0)
一些问题:
为按钮onclick
处理程序分配新值,...单击它时。这似乎是错误的,尤其是因为你没有给它分配一个函数:
document.getElementById("coverCard").onclick = Alert.render("do option 1 please")
这里发生的是render
方法立即执行。这一切都非常令人困惑,因为看起来你想要这样做:
document.getElementById("coverCard").onclick = function () {
Alert.render("do option 1 please");
};
...这将使render
方法在下一次点击时执行,但是在您的描述中,您说您确实希望render
方法在第一次点击,而不是下一次。因此,在后一种情况下,您应该只执行render
方法,而不是为onclick
方法分配任何内容:
Alert.render("do option 1 please");
混合使用两者是错误的:render
方法不返回函数,因此不应将其结果分配给onclick
属性。所以我假设您只想执行render
。
第二个问题是,您在页面加载时决定this.ok
的分配,即执行new CustomAlert()
的时间:
if (bbbbb === 0) {
this.ok = function() {
alert("do option1")
console.log(bbbbb)
}
} else
this.ok = function() {
alert("do option 2")
console.log(bbbbb)
}
您的决定基于b
的值,此时此值是随机的。稍后,当您点击该按钮时,您将b
的值更改为零,但这不再影响之前的决定:this.ok
因为将b
设置为b
而不会神奇地改变零。
您可以通过将条件放在this.ok
this.ok = function() {
if (bbbbb === 0) {
alert("do option1")
} else {
alert("do option 2")
}
console.log(bbbbb)
}
函数中来解决此问题,如下所示:
alert
现在,您将拥有<input type="file" id="someName" name="file" class="multi" onchange="return Plugins.handleFileSelect(this);"/>
中提到的正确选项。