2016-11-29 57 views
0
<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。 。爲什麼onkeypress事件不是爲表格內的文本框觸發的?

回答

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

您設置onkeypress屬性調用writePredecessor()的返回值。由於該函數沒有返回語句,即undefined,它被串化爲"undefined",這是一些JavaScript什麼也不做的。

使用x.addEventListener("keypress", writePredecessor),就像您在處理加載事件的腳本末尾所做的一樣。

+0

如果我有我從方法返回的任何屬性,那麼只有我可以使用'writePredecessor()',否則我需要返回'writePredecessor'你的意思是相同的答案 – David

+0

@David - 不,我不知道。關鍵是將函數分配爲事件處理函數,而不是立即調用函數,並將返回值(它是'undefined')作爲事件處理函數。 – Quentin

相關問題