2017-08-11 8 views
2

私は、2つのHTML入力フィールドの値を受け取り、どのボタンがクリックされたかによってそれらを乗算または分割する基本的なプログラムを作ろうとしています。現時点では、私はちょうどdocument.getElementById()を介して乗算または除算ボタンのいずれかの値を警告しようとしています。クリックするボタンに関係なく、同じ結果が得られるのはなぜですか?

しかし、私はDivideをクリックしても、私がMultiplyボタンをクリックしたと考えています。ここで

はHTMLです:

<form> 
    <input type="text" placeholder="enter a number" id="numOne"/> 
    <input type="text" placeholder="enter a number" id="numTwo"/> 
    <br> 
    <button id="M" onclick="calc()" value="Multiply">Multiply</button> 
    <button id="D" onclick="calc()" value="Divide">Divide</button> 
</form> 

とJavaScript:

function calc() { 
    if (document.getElementById('M').value === 'Multiply') { 
     alert('You clicked multiply'); 
    } else if (document.getElementById('D').value === 'Divide') { 
     alert('You clicked divide'); 
    } 
} 

私は自分自身をそれを把握し、それをルックアップするために試した、何も見つかりませんでした。

+1

なぜボタンの値は変わりますか?各ボタンに異なる機能を使用するだけです。 – adeneo

+0

この質問には何の問題もありませんでした。私はあなたが提供したコードと与えられた答えから問題の性質を推測しようとしましたが、それを追加してください。それをさらに編集することは自由ですが、予期しない振る舞い質問はここで保留になります。 – halfer

答えて

4

あなたは、そのボタンの値は常に「乗算」になりますので、最初のifチェック(if (document.getElementById('M').value === 'Multiply') {)は常にtrueと評価されます各ボタン

document.getElementById('M').addEventListener('click', function(e) { 
 
    e.preventDefault(); 
 
    
 
    var val1 = document.getElementById('numOne').value; 
 
    var val2 = document.getElementById('numTwo').value; 
 
    var answ = document.getElementById('answer'); 
 
    
 
    answ.value = val1 * val2; 
 
}); 
 

 
document.getElementById('D').addEventListener('click', function(e) { 
 
    e.preventDefault(); 
 
    
 
    var val1 = document.getElementById('numOne').value; 
 
    var val2 = document.getElementById('numTwo').value; 
 
    var answ = document.getElementById('answer'); 
 
    
 
    answ.value = val1/val2; 
 
});
<form> 
 
    <input placeholder="enter a number" id="numOne" /> 
 
    <input placeholder="enter a number" id="numTwo" /> 
 
    <br> 
 
    <button id="M">Multiply</button> 
 
    <button id="D">Divide</button> 
 
    <br><br> 
 
    <input id="answer" /> 
 
</form>

+0

聖なる君たち、ありがとう!これらの反応は信じられないほど速かった。今は完全に正常に動作します。私を自分から救ってくれてありがとう! – frustratedFrankenstein

+0

あなたは大歓迎です! – adeneo

+0

@frustratedFrankenstein 2つの関数を書く代わりに、2つのボタンに同じクラスを与え、クラスごとに1つの関数を要素にバインドすることもできます。 idを 'this.id'で確認することができます。 – illiteratecoder

1

に別の機能を追加することができます。メソッドに何をするかを知らせるcalc()にonclickパラメータを渡すか、掛け算と除算のための別々のメソッドを定義し、それぞれをonclickと呼ぶことができます。

0

これは両方のボタンが同じ機能を持ち、最初にM idが掛け算されているかどうかをチェックしてtrueを返し、メッセージの掛け算をクリックしたため、同じクラス名を使用して値をチェックしてから働くでしょう。それとも、このようにそれを行う:あなたが変えることはない状態をチェックした

function calc(thisValue) { 
 
    if (thisValue === 'Multiply') { 
 
     alert('You clicked multiply'); 
 
    } else if (thisValue === 'Divide') { 
 
     alert('You clicked divide'); 
 
    } 
 
}
<form> 
 
<input type="text" placeholder="enter a number" id="numOne"/> 
 
<input type="text" placeholder="enter a number" id="numTwo"/> 
 
    <br> 
 
<button onclick="calc(this.value)" value="Multiply">Multiply</button> 
 
<button onclick="calc(this.value)" value="Divide">Divide</button> 
 
</form>

0

。 ID Mは常にMultiplyの値を持ち、Dの値は常にDivideです。

あなたはクリックされたボタンのIDを動的に調べることを考えていた可能性があります。これは、イベントオブジェクトを渡して、event.currentTargetを使用してその要素への参照を取得し、見つかったIDに基づいて動作させることで実行できます。

function calc(event) { 
 
    // Stop the form from submitting 
 
    event.preventDefault(); 
 
    
 
    // Find which button was clicked. 
 
    const btn = event.currentTarget; 
 
    
 
    // Use the ID of btn to decide what to do 
 
    switch (btn.id) { 
 
    case "M": 
 
    alert('You clicked multiply'); 
 
    break; 
 
    case "D": 
 
    alert('You clicked divide'); 
 
    break; 
 
    } 
 
}
<form> 
 
    <input type="text" placeholder="enter a number" id="numOne" /> 
 
    <input type="text" placeholder="enter a number" id="numTwo" /> 
 
    <br> 
 
    <button id="M" onclick="calc(event)" value="Multiply">Multiply</button> 
 
    <button id="D" onclick="calc(event)" value="Divide">Divide</button> 
 
</form>

関連する問題