2017-10-20 9 views
0

私は以下のようにHTMLテーブルを持っています。非ヘッダー行の最後には、コピー用と編集用の2つのリンクがあります。クリックすると、下に定義されているJavaScript関数がトリガーされます。HTMLハイパーリンクを使用して親要素のJS関数を呼び出す

function editRow(el) { 
 
    //alert function added for debug purposes 
 
    alert(el.rowIndex); 
 
}
<table> 
 
    <tr> 
 
     <th>Date</th> 
 
     <th>Tools</th> 
 
    </tr> 
 
    <tr> 
 
     <td>20 October 2017</td> 
 
     <td> 
 
      <a href="javascript:editRow(this)">Edit</a> 
 
      <a href="javascript:copyRow(this)">Copy</a> 
 
     </td> 
 
    </tr> 
 
    <tr> 
 
     <td>19 October 2017</td> 
 
     <td> 
 
      <a href="javascript:editRow(this)">Edit</a> 
 
      <a href="javascript:copyRow(this)">Copy</a> 
 
     </td> 
 
    </tr> 
 
</table>

ただし、アラートは常にundefinedを言います。これは、ハイパーリンクがテキストではなくセルで関数を呼び出すためだと思います。 editRow(this)の呼び出しを親要素で呼び出す呼び出しに変更するにはどうすればよいですか?私はeditRow(parent)editRow(this.parent)を試しましたが、何も役に立ちませんでした。

+0

あなたは 'にconsole.log(エル)'関数では、 'this'が実際に何であるかを学ぶかもしれないが、そこから作業した場合。 – GolezTrol

答えて

0

あなたの問題はjavascript: editRow(this)を使用してJavaScriptを呼び出すときに、thisはあなたがHTMLからハンドラをインストールすることで、あなたのコードを修正することができますが、あなたが本当にJSからそれを行う必要がありますwindowオブジェクト

に設定されていることです。

簡略化のために、HTML属性onclickを使用して以下の例を追加しました。

function editRow(obj) { 
 
    console.log('edit handler tagname', obj.tagName); 
 
} 
 

 
function copyRow(obj) { 
 
    console.log('copy handler parent tr rowIndex', obj.parentElement.parentElement.rowIndex); 
 
}
<table> 
 
    <tr> 
 
    <th>Date</th> 
 
    <th>Tools</th> 
 
    </tr> 
 
    <tr> 
 
    <td>20 October 2017</td> 
 
    <td> 
 
     <a onclick="editRow(this)" href="#">Edit</a> 
 
     <a onclick="javascript:copyRow(this)" href="#">Copy</a> 
 
    </td> 
 
    </tr> 
 
    <tr> 
 
    <td>19 October 2017</td> 
 
    <td> 
 
     <a onclick="editRow(this)" href="#">Edit</a> 
 
     <a onclick="copyRow(this)" href="#">Copy</a></td> 
 
    </tr> 
 
</table>

+0

奇妙なことに、私のために働いていません。私はコードを書き直してあなたに戻ってきます – 63penguin

+0

@ 63penguinそれはうまくいかないという意味ですか?何がうまくいかないの?私がそれを実行すると、出力が表示されます: 'edit handler tagname A'と ' copy handler parent tr rowIndex 2'あなたは決して「うまくいきません」と言うべきではありません。代わりに、何が起こったか起こっていないか、そして何らかのエラーメッセージが予期された動作と一緒に説明されている –

+0

エラーメッセージ:未定義のプロパティ 'parentElement'を読み取ることができません – 63penguin

関連する問題