Javascript jQuery单击事件不发生';我好像不工作

Javascript jQuery单击事件不发生';我好像不工作,javascript,jquery,Javascript,Jquery,我正在练习使用jQuery做一个简单的计算器,我觉得代码本身非常简单,但无论我做什么,都不会发生任何事情,就好像没有链接到beging的js文件一样。以下是jQuery代码: function ud(n){ $("#display").append += n; } function ans(c){ c = eval($("#display").html); $("#display").append = c

我正在练习使用jQuery做一个简单的计算器,我觉得代码本身非常简单,但无论我做什么,都不会发生任何事情,就好像没有链接到beging的js文件一样。以下是jQuery代码:

    function ud(n){
    $("#display").append += n;
}
function ans(c){
    c = eval($("#display").html);
    $("#display").append = c; 
}
function clc(){
    $("#display").append = '';
}

$("#button0").click(ud(0))
$("#button1").click(ud(1));
$("#button2").click(ud(2));
$("#button3").click(ud(3));
$("#button4").click(ud(4));
$("#button5").click(ud(5));
$("#button6").click(ud(6));
$("#button7").click(ud(7));
$("#button8").click(ud(8));
$("#button9").click(ud(9));

$("#addButton").click(ud('+'));
$("#subtractButton").click(ud('-'));
$("#multiplyButton").click(ud('*'));
$("#clearButton").click(clc());
$("#equalsButton").click(ans());
$("#divideButton").click(ud('/'));
以下是html:

    <tr>
  <td colspan="4"><input id="display" name="display" disabled></input></td>
</tr>

<tr>
  <td><button id="button1" value="1">1</button></td>
  <td><button id="button2" value="2">2</button></td>
  <td><button id="button3" value="3">3</button></td>
  <td><button id="addButton">+</button></td>
</tr>
<tr>
  <td><button id="button4" value="4">4</button></td>
  <td><button id="button5" value="5">5</button></td>
  <td><button id="button6" value="6">6</button></td>
  <td><button id="subtractButton">-</button></td>
</tr>
<tr>
  <td><button id="button7" value="7">7</button></td>
  <td><button id="button8" value="8">8</button></td>
  <td><button id="button9" value="9">9</button></td>
  <td><button id="multiplyButton">*</button></td>
</tr>
<tr>
  <td><button id="clearButton">C</button></td>
  <td><button id="button0" value="0">0</button></td>
  <td><button id="equalsButton">=</button></td>
  <td><button id="divideButton">&#247;</button></td>
</tr>

1.
2.
3.
+
4.
5.
6.
-
7.
8.
9
*
C
0
=
÷

有人能解释一下我做错了什么吗?有更简单的方法吗?提前感谢您

我修改了您的代码并进行了重构。 它应该会起作用

在原始代码中,包含一些错误语法:

  • 输入字段应该设置值,因此您应该使用
    val()
    ,而不是使用
    append()
    ,并且在代码中使用的是错误的

  • 单击事件传递参数,请查看并传递一个不需要执行的函数

  • 功能ud(e){
    var currentVal=$(“#显示”).val();
    $(“#display”).val(currentVal+e.data.n);
    }
    功能ans(c){
    var result=eval($(“#display”).val();
    $(“#显示”).val(结果);
    }
    函数clc(){
    $(“#显示”).val(“”);
    }
    对于(变量i=0;i<10;i++){
    $(#按钮'+i)。单击({n:i},ud);
    }
    $(“#添加按钮”)。单击({n:'+'},ud);
    $(“#减法按钮”)。单击({n:'-'},ud);
    $(“#multiplyButton”)。单击({n:'*},ud);
    $(“#divideButton”)。单击({n:'/'},ud);
    $(“#清除按钮”)。单击(clc);
    $(“#相等按钮”)。单击(ans)
    
    
    1.
    2.
    3.
    +
    4.
    5.
    6.
    -
    7.
    8.
    9
    *
    C
    0
    =
    ÷
    
    您正在调用.click()事件函数中的函数,但它需要函数引用或匿名函数作为参数


  • 在表示数字的计算器按钮中添加一个通用类名(例如“numberKey”)

    1

  • 一次选择所有这些按钮,并对所有按钮使用单击事件处理程序

     $(function() {
         $('button.numberKey').click(updateDisplay);
     });
    
     function updateDisplay(clickEventObject) {
    
         // The button that was clicked can be referenced using
           // the 'this' keyword.
    
         // Variable-ize the button element into a jQuery object.
         let $button = $(this);
    
         // Get the 'value' attribute of the button
         let number = $button.attr('value');
    
         // Get the displayed value.
         var expression = $("#display").val();
    
         // Append the number to the display's value
         $("#display").val(`{$expression}{$number}`);
     }
    


  • 仅供参考,jQuery.append不是一个可以附加到或设置为值的属性。它是一个可以传递字符串值的函数。并且该值将附加到所选元素的内容中。

    如果要清除输入元素,应将其值设置为空字符串:
    $('#display').val('');
    


    “ans”(答案?)功能的工作原理如下:
    function solve_ans() {
        let expression = $('#display').val();
        let solution = eval(expression);
        $('#display').val(solution);
    }
    


    另外,请注意,如果在任何上下文中多次使用同一选择器,则通常值得将选择的结果缓存/存储在变量中,然后重用它,而不是重新选择相同的元素。
    祝你好运

    click()
    需要一个函数,但您调用的是不返回函数的
    ud()
    。将需要执行
    $(“#按钮0”)。单击(()=>ud(0))
    $(“#按钮0”)。单击(函数(){ud(0)}
    也是
    append()
    函数。你用错了。查看并检查浏览器开发工具控制台中的错误(F12),我一定要坐下来阅读文档。你的代码在你更新它之前就已经运行了,除了它返回了双精度的数字9之外,但是我把它改成了0,一切都很好。谢谢你的解释!我很高兴我能帮上忙。嘿,在我做了一个操作并单击“相等”按钮后,我如何才能使它“重置”并显示一个位数?
    function solve_ans() {
        // Referring to this $display variable avoids repeatedly re-selecting the same elements from the DOM whenever you may need to refer to them.
        let $display = $('#display');
        let expression = $display.val();
        let solution = eval(expression);
        $display.val(solution);
    
        $display.addClass('solution').removeClass('expression');
    }