为什么不为表格内的文本框触发onkeypress事件?

时间:2016-11-29 07:48:06

标签: javascript

<table id="selectedTable">
  <thead>  
     <tr>
       <td>ID</td>
       <td>VAL1</td>
       <td>VAL2</td>
     </tr>
  </thead>
  <tbody id="selectedTableBody">
      <tr>  
        <td>1</td>
        <td name="positionColumn"><input name="position" value="1" /></td>
        <td name="predecessorColumn"><input name="predecessor" value="0"/></td>
      </tr>

      <tr>  
        <td>2</td>
        <td name="positionColumn"><input name="position" value="2"/></td>
        <td name="predecessorColumn"><input name="predecessor" value="1"/></td>
      </tr>

      <tr>  
        <td>2</td>
        <td name="positionColumn"><input name="position" value="2"/></td>
        <td name="predecessorColumn"><input name="predecessor" value="1"/></td>
      </tr>
  </tbody>
</table>
<script>
   function addEvn()
     {
        alert("event added...");
        var x = document.getElementById("selectedTable").rows[1].cells[1].children[0];
        x.setAttribute("onkeypress",writePredecessor());
     }
     function writePredecessor()
     {
       alert("WP Called");
       var x = document.getElementById("selectedTable").rows[1].cells[1].children[0];

        var y = document.getElementById("selectedTable").rows[1].cells[2].children[0];
         y.value=x.value-1;

     }
     window.addEventListener("load",addEvn);
</script>

每当输入一个文本框值时,我都添加了一个事件。但是该事件没有触发。如果我​​在位置文本框中键入数字,则前任文本框应自动分配给相同的数字减1。

1 个答案:

答案 0 :(得分:4)

x.setAttribute("onkeypress",writePredecessor());

您正在将onkeypress属性设置为调用writePredecessor()的返回值。由于该函数没有返回语句,因此undefined会被字符串化为"undefined",这是一些无效的JavaScript。

使用x.addEventListener("keypress", writePredecessor),就像在脚本末尾处理加载事件一样。