2017-02-26 12 views
0

ifの条件が満たされていれば何かするはずのこの小さなコードがあります。それはうまくいきませんし、理由を理解できませんでした。コードは少し長いです。私と一緒にご負担ください。何らかの助けが本当に感謝しています!Javascript関数if文が正しく実行されていない

まず、それが

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; 
    } 
    } 

は最後に次のように従うことの関数であるとして示され、この関数はGodAn機能につながる機能

function coverCard() { 
    if (2 > 1) { 
    GodAn(); 
    } else { 
     if (bbbbb === 0) { 
     do something 
     } else { 
     do sth 
     } 
    } 
    } 

をトリガします]をクリックしたとき、私は、私のhtml内のボタンを持っていますダイアログボックスに表示される内容とその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機能では、グローバル変数bbbbb0にリセットされていても、"do option 2"アラートが誤ってトリガーされることがあります。 (console.logはまたbbbbb0であることを確認する)。

私は、元のHTMLファイルをアップロードしたとのリンクはこちらです:

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

誰かがここにいくつかの光を当てるしてくださいしてくださいので、これは本当に狂気私を駆動しますか?ここで

https://jsfiddle.net/5bn0ux5k/

それは予想通り単に警告1(オプションに設定されている警報1または警報2がトリガされているかどうかを純粋にランダムイベントであるように私には思える私のコードにjsFiddleリンクあり1)

+3

あなたは自分の好意を持ち、コードのインデントを使用することができます。 –

+1

問題を説明するjsFiddle、codepenまたはsnippetを提供してください。 – jcaron

+0

また、ニーナが述べたように、適切で一貫したコードインデントを使用してください。あなたはあなたが望むようにあなた自身のためにそれを読むことができないようにすることができます。ここでは、コードを他の人が読めるように努力することが期待されています。それには適切なインデントが必要です。 –

答えて

0

いくつかの問題:

あなたはボタンonclickハンドラに新しい値を割り当て、...あなたはそれをクリックしたとき。あなたはそれに機能を割り当てていないので、これはなおさら間違っているようだ、と:ここに何が起こる

document.getElementById("coverCard").onclick = Alert.render("do option 1 please") 

render方法がすぐに実行されていることです。 render方法はクリックで実行させることになる...

document.getElementById("coverCard").onclick = function() { 
    Alert.render("do option 1 please"); 
}; 

が、その後、あなたの説明では、あなたが実際に行うと言う:あなたはこれをやってみたかったように見えるので、これは、すべての非常に混乱して最初のクリック時にrenderメソッドを実行し、の次のでは実行しないでください。だから後者の場合には、あなただけのrenderメソッドを実行する必要があり、かつonclick方法には何も割り当てない:

Alert.render("do option 1 please"); 

両方のミックスを行うことは間違っている:render方法は、その結果ので、機能を返しません。 onclickプロパティに割り当てることはできません。だから私はrenderを実行したいと思うでしょう。

new CustomAlert()が実行されたときに、第2の問題はつまり、あなたがページが読み込ま現時点で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の値が0に変更されますが、それ以上の決定には影響しません。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

関連する問題