2017-10-16 52 views
-1

爲什麼只有我把var兩個功能放在一起,而不是全局的var,爲什麼「multiply」按鈕才起作用?爲什麼addEventListener不能獲取全局變量?

這裏是我的代碼:

var first = document.getElementById("firstN").value; 
 
var second = document.getElementById("secondN").value; 
 

 
document.getElementById("multiply").addEventListener("click", function() { 
 
    document.getElementById("answer").innerHTML = first * second; 
 
});
<p>1st Number: <input id="firstN" type="number"></p> 
 
<p>2nd Number: <input id="secondN" type="number"></p> 
 
<button id="multiply">Multiply</button> 
 
<button id="divide">Divide</button> 
 
<p>The result is: <span id="answer"></span></p>

+0

不知道我完全理解你的問題,但是'first'和'second'只在設置時鐘處理程序之前設置一次。 – Carcigenicate

+0

請提供更多信息。你究竟想達到什麼目的? – Krusader

+0

什麼是輸入的初始'.value' ...?沒有。你把它分配給「第一」。你永遠不會再次獲得輸入的價值。這就是爲什麼。 – deceze

回答

2

的問題是,你需要找出的firstsecond當你單擊該按鈕的值。

document.getElementById("multiply").addEventListener("click", function(){ 
    var first = document.getElementById("firstN").value; 
    var second = document.getElementById("secondN").value; 
    document.getElementById("answer").innerHTML = first * second; 
}); 

document.getElementById("multiply").addEventListener("click", function() { 
 
     var first = document.getElementById("firstN").value; 
 
     var second = document.getElementById("secondN").value; 
 
     document.getElementById("answer").innerHTML = first * second; 
 
    });
<p>1st Number: <input id="firstN" type="number"></p> 
 
<p>2nd Number: <input id="secondN" type="number"></p> 
 
<button id="multiply">Multiply</button> 
 
<button id="divide">Divide</button> 
 
<p>The result is: <span id="answer"></span></p>

-1

您需要設置第一和第二內側addEventListner的價值。

window.onload = function() { 
 

 
    document.getElementById("multiply").addEventListener("click", function() { 
 
     var first = document.getElementById("firstN").value; 
 
     var second = document.getElementById("secondN").value; 
 
     document.getElementById("answer").innerHTML = first * second; 
 
    }); 
 
}
<p>1st Number: <input id="firstN" type="number"></p> 
 
<p>2nd Number: <input id="secondN" type="number"></p> 
 
<button id="multiply">Multiply</button> 
 
<button id="divide">Divide</button> 
 
<p>The result is: <span id="answer"></span></p>

請添加更多的清晰度,如果你正在尋找一些不同的答案質疑。

0

如果您想要在事件處理程序中創建變量firstsecond,最多隻選擇元素(在本例中,我使用的是document.querySelector())。

var first = document.querySelector('#firstN'); 
var second = document.querySelector('#secondN'); 

入住的答案,使用document.querySelectorAll()您可以選擇多個元素在一次click事件處理..和訪問內容value屬性附加在函數處理器解決鴻溝在一種方法中。

代碼例如:

var first = document.querySelector('#firstN'); 
 
var second = document.querySelector('#secondN'); 
 
     
 
document 
 
    .querySelectorAll('#multiply, #divide') 
 
    .forEach(function (elem) { 
 
    elem.addEventListener('click', function() { 
 
     var result = { 
 
      'multiply': first.value * second.value, 
 
      'divide': first.value/second.value 
 
     }; 
 
     document.querySelector('#answer').innerHTML = result[elem.id]; 
 
    }); 
 
    });
<p>1st Number: <input id="firstN" type="number"></p> 
 
<p>2nd Number: <input id="secondN" type="number"></p> 
 
<button id="multiply">Multiply</button> 
 
<button id="divide">Divide</button> 
 
<p>The result is: <span id="answer"></span></p>

注意,由@Alexandru-Ionut Mihai變量的值firstsecond所解釋應與在事件處理功能被分配。

0

問題是,當頁面加載並解析時,它存儲變量的值firstsecond,此時爲null

因此,您必須在click事件中聲明或分配值,以便將輸入的值分配給變量。 dom默認輸入格式爲string,因此您必須使用parseInt/parseFloat方法處理該方法,該方法會將string更改爲numbers

document.getElementById("multiply").addEventListener("click", function() { 
 
    var first = document.getElementById("firstN").value; 
 
    var second = document.getElementById("secondN").value; 
 
    document.getElementById("answer").innerHTML = parseFloat(first) * parseFloat(second); 
 
});
<p>1st Number: <input id="firstN" type="number"></p> 
 
<p>2nd Number: <input id="secondN" type="number"></p> 
 
<button id="multiply">Multiply</button> 
 
<button id="divide">Divide</button> 
 
<p>The result is: <span id="answer"></span></p>

對於您可以參考這些文章的詳細信息:

  1. parseInt/parseFloat
  2. string/number
  3. addEventListener
相關問題