jqueryのattrでonclickが書き換えられない

コンバンハコンバンハ。
ue10000です。


表題のとおりなのですが、jqueryのattrでonclickの中身を書き換えようとしたら出来ませんでしたorz chromeデバッグしてて気づけて良かった。


理由はhttp://sho.tdiary.net/20100324.htmlに記載されている通りのようです。
今時onclickで書くなよってツッコミもあるかもしれませんが、時と場合によっては必要なんです。

ページを読み込むと

<a id="hogeid" href="/" onclick="return hogehoge();"><img src="hogehoge.jpg" /></a>

というようなタグを吐き出すjavascriptをページに仕込んでいます。


ue10000はonclick属性の中身をjqueryで変更したかったんです。
特になんも考えず、

$("#hogeid").attr("onclick", "return hogehoge-part2()");

とやったんですが書き変わらない。


でぐぐってみると、http://sho.tdiary.net/20100324.htmlが引っかかりました。先人の知識に感謝。


仕方が無いので邪道ですが以下で対処。
jqueryのliveイベントを使います。
一旦onclick属性を削除→ラジオボタンの値によってイベントハンドラを切り替えって流れです。

$('input[name="hogehoge-selector"]').live("click", function(){
                                   $("#hogehoge-gen-sample > a").removeAttr("onclick");
                                   hogehogeselect = $('input[name="hogehoge-selector"]:checked').val();
                                   if (hogehogeselect == "default-hogehoge"){
                                   $("#hogehoge-gen-sample > a").click(function(){
                                                  HogeHogeGo(false,false,'xxxxxxxxxxxxxxxxxxxxxxx');
                                                  });
                                   } else {
                                   $("#hogehoge-gen-sample > a").click(function(){
                                                  HogeHogeGo(true,false,'xxxxxxxxxxxxxxxxxxxxxxx');
                                                  });
                                   }
                               });

liveイベントって便利だわー