javascript - 使符号运算符出现在文本框上时出现问题

标签 javascript html css

单击 ADD div 时,文本框上应出现“+”。 SUBSTRACT、MULTIPLY 和 DIVIDE 也是如此。我无法让运算符显示在文本框上。这是我到目前为止所得到的。

    <!DOCTYPE html>
    <html>
    <body>
    
    <div class="leftDiv">
    			<div id="colorblock">
    				<div id = "add" class = "blocks" onclick="displayOptr()">ADD</div>
    				<div id = "subtract" class = "blocks">SUBTRACT</div>
    				<div id = "multiply" class = "blocks">MULTIPLY</div>
    				<div id = "divide" class = "blocks">DIVIDE</div>
    			</div>
    		</div>
    <input type = "text" size="1" id = "operator">
    
    
    <script>
    function displayOptr() {
        var optrArr =["+","-","*","/"];
        for (var i = 0; i < optrArr.length; i++){
        	if (i==0){
            	document.getElementById("operator").value = "+";
            } else if (i==1){
            	document.getElementById("operator").value = "-";
            } else if (i==2){
            	document.getElementById("operator").value = "*";
            } else if (i==3){
            	document.getElementById("operator").value = "/";    
        }
        
        
    }
    </script>
    
    </body>
    </html>

最佳答案

目前,您的 if 语句缺少一个右大括号,这会导致错误阻止您的代码运行。

修复该问题后,您的代码将循环遍历您的数组,并在每次迭代时将其中一个符号放入文本框中。但是,在下一次迭代中,它只是替换了那个符号。代码完成后,您将始终在文本框中看到 /

相反,只需将要显示的符号传递给函数。

此外,不要将事件处理程序设置为 HTML 属性(onclick、onmouseover 等),因为这种旧语法会创建“意大利面条代码”,难以阅读,不能很好地扩展,创建隐式全局包装函数更改 this 绑定(bind)并且不遵循 W3C 事件注册标准。改为使用 addEventListener() 在 JavaScript 中进行事件绑定(bind)。

这是一个工作版本:

<!DOCTYPE html>
    <html>
    <body>
    
    <div class="leftDiv">
    			<div id="colorblock">
    				<div id = "add" class = "blocks" onclick="displayOptr()">ADD</div>
    				<div id = "subtract" class = "blocks">SUBTRACT</div>
    				<div id = "multiply" class = "blocks">MULTIPLY</div>
    				<div id = "divide" class = "blocks">DIVIDE</div>
    			</div>
    		</div>
    <input type = "text" size="1" id = "operator">
    
    
    <script>
    
    // Get references to the elements you'll need:
    var a = document.getElementById("add");
    var s = document.getElementById("subtract");
    var m = document.getElementById("multiply");
    var d = document.getElementById("divide"); 
    var output = document.getElementById("operator");
    
    // Set up click event handlers that each call the same function but pass it 
    // a different value.
    a.addEventListener("click", function(){ displayOptr("+") });
    s.addEventListener("click", function(){ displayOptr("-") });
    m.addEventListener("click", function(){ displayOptr("*") });
    d.addEventListener("click", function(){ displayOptr("/") });    
    
    function displayOptr(input) {
      // Just take the input and display in the textbox
      output.value = input;       
    }
    </script>
    
    </body>
    </html>

关于javascript - 使符号运算符出现在文本框上时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43400538/

相关文章:

javascript - 扩展作为参数传递的 Javascript 函数

html - 将 Typekit 与 MAMP 结合使用

css - 为什么按钮在使用相同类的特定 div 标签之间不起作用?

html - 删除 Bootstrap 中标题图像中的细线

javascript - html网页中的表情符号选择器

javascript - 将回调的范围设置为执行的位置?

javascript - 获取 PHP 变量的 slider 值

javascript - <脚本类型 ="module"> 加载性能

html - '位置: sticky' not working when 'height' is defined

html - 将链接的 div 保持在普通 div 之后