• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Yahoo! UI LibraryのDataTable変換で指定したイベント属性が消える)

Yahoo! UI LibraryのDataTable変換で指定したイベント属性が消える

このQ&Aのポイント
  • Yahoo! UI LibraryのDataTableを使用してウェブページを実装しています。しかし、HTMLのtableタグ内のonclick属性を指定したtd要素が、DataTableに変換すると無効になってしまいます。
  • テーブルの変換により、独自に指定したonclick属性が消えてしまうため、行のクリックイベントでデータを取得し、次の画面に遷移することができません。
  • Yahoo! UIから提供されているDOM操作メソッドを使用して、クリックイベントを取得することができます。しかし、別の方法を教えていただけないでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.3

Yahoo! UI Libraryはまったくわかりませんが… 表示後のDOMソースを表示させてみればわかりますが、table部分は再構築されているみたいで、イベントだけでなくidやclass設定などもキャンセルされていますし、表示内容もtd直下ではなくtd内のdiv要素に設定し直しているようです。 (table以外のイベント設定は、当初のソースのままですが…) それなので、変換後テーブルに再設定(というよりも最初の設定は不要)してあげればよさそうです。 Yahoo! UIのDOM操作はわかりませんので、ごく普通に var t = document.getElementById('myMarkedUpContainer').getElementsByTagName('TABLE')[0]; t.rows[2].cells[0].onclick = function(){ alert('clicked!'); } とか、(ご質問文から見るとaddListenerが使えるらしいので) var t = document.getElementById('myMarkedUpContainer').getElementsByTagName('TABLE')[0]; YAHOO.util.Event.addListener(t, "click", function() { alert('clicked!'); }); とかを、最後に追加することでセルにイベント設定ができます。 「DataTable」に並べ替えなどの機能があるのかわかりませんが、動的に変更されるような場合、この設定が生きるのかどうかはわかりません。 そんなこともあって、個々のセルにイベントを設定して回るよりは、#1様の回答のように上位要素(documentまでいかなくてもtableなど)に代表して設定しておくほうがよさそうですね。 注)tbodyの1行目に『Loading...』という行が追加されるみたいなので、行の指定が1行ずれると思われます(theadはそのまま)。識別にちょっと注意が必要です。

hvorfor
質問者

お礼

返信が遅くなり申し訳ないです。 回答ありがとうございました。 「表示後のDOMソースを表示」というところを見落としていました。 たしかにソースを見ると、まるっきり別ソースに書き換えられていますね・・ どうりでWicketで設定したonClickイベントが無効になるわけですね。 今回のプログラムではYahoo! UIのDOM操作で実現するか それ以外の別の方法を考えて実装したいと思います。

その他の回答 (2)

回答No.2

#1です。ついき。 alert("うえから、" + e.parentNode.rowIndex+ "ぎょうめで、" + e.cellIndex + "れつめだわ" );

回答No.1

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <title>TEST</title> <body> <table border="1" summary="さんぷるだじょ">  <tr>   <th>abc   <td>123   <td>あいう  <tr>   <th>def   <td>456   <td>えおか </table> <script type="text/javascript"> //@cc_on var Handler = function ( evt ) {  var e = evt./*@if( @_jscript ) srcElement @else@*/ target /*@end@*/;    'TD' == e.nodeName &&   alert("いや~ん!それは「" + e./*@if (@_jscript) innerText @else@*/ textContent /*@end@*/ + "」よ!"); }; document./*@if( @_jscript ) attachEvent( 'on' + @else@*/ addEventListener( /*@end@*/  'click', Handler, false ); </script> いべんとをどきゅめんとから、かんししちゃうぞ!!

hvorfor
質問者

お礼

返信が遅くなり申し訳ないです。 回答ありがとうございました。 記載していただいたソースを自分のプログラムに取り込んで実行してみました。 その結果、イベントの監視ができることにはできるのですが、 Yahoo! UIと相性が悪いのか、監視タイミングがまちまちで 今回のプログラムでは別の方法を採用したいと思います。 別件ですが、cc_onステートメントをはじめて知ったので勉強になりました。 ありがとうございました。

関連するQ&A