2017-02-26 109 views
0

我有這樣一小段代碼,如果滿足某些if條件,就應該執行某些操作。它不工作,因爲它應該和我不明白爲什麼。代碼有點冗長,請耐心等待。任何一種幫助真的很感謝!如果語句沒有被執行,那麼Javascript函數就沒有權利

首先我有一個按鈕,在我的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; 
    } 
    } 

最後下面是功能定義對話框中顯示的內容以及點擊按鈕後會出現什麼情況

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功能中,即使全局變量bbbbb重置爲0"do option 2"警報也將被錯誤觸發。 (console.log也確認bbbbb0)。

我已上傳的原始的HTML文件和鏈接是在這裏:

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

這真的讓我瘋狂所以有人請點擊這裏提供一些線索嗎?

這裏是的jsfiddle鏈接到我的代碼

https://jsfiddle.net/5bn0ux5k/

在我看來,該警報1警報2是否觸發是一個純粹的隨機事件,而它果然設置爲只提示1(選項1)

+3

你可以幫你一個忙,並使用代碼縮進。 –

+1

請提供說明您的問題的jsFiddle,codepen或snippet。 – jcaron

+0

正如Nina所說,再次使用正確,一致的代碼縮進。只要你願意,你可以讓自己無法讀懂;在這裏,你需要努力並確保代碼可以被其他人閱讀。這涉及適當的縮進。 –

回答

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

的第二個問題是,當執行new CustomAlert()你決定分配爲this.ok此刻的頁面加載,即:

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提到正確的選項。

+0

這個作品,謝謝! – Frostless