2016-11-29 1 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()); 

あなたはwritePredecessor()を呼び出しの戻り値にonkeypress属性を設定しています。その関数はreturn文を持たないので、undefined"undefined"に文字列化されます。これは何もしないJavaScriptのビットです。

ロードイベントを処理するスクリプトの最後と同じように、x.addEventListener("keypress", writePredecessor)を使用します。

+0

私がメソッドから返す属性があれば、 'writePredecessor()'しか使うことができません。そうでなければ 'writePredecessor'を返す必要があります。答えは – David

+0

です@David - いいえ、そうではありません。重要な点は、関数をイベントハンドラとして割り当て、直ちに関数を呼び出すのではなく、戻り値( 'undefined')をイベントハンドラとして割り当てることです。 – Quentin

関連する問題