Javascript函数if语句没有正确执行

时间:2017-02-26 10:39:41

标签: javascript html if-statement

如果满足某些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也确认bbbbb0)。

我上传了原始的html文件,链接在这里:

https://wetransfer.com/downloads/313ba63c7a101f917cbc9e6f9a4c5ade20170226122032/43cedb

这真让我疯狂,所以请有人在这里说明一点?

这是我的代码的

https://jsfiddle.net/5bn0ux5k/

在我看来,警报1或警报2是否被触发是一个纯粹的随机事件,而它预计会被设置为警报1(选项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);"/> 中提到的正确选项。