2012-02-05 18 views
-1

私の質問です!私はあるテーブルから別のテーブルにコンテンツをコピーしています。私はこれを行うときに、talentselectに変更する関数名が、各テーブル行に添付されているdriverselectの代わりに必要です。変数値を解析する必要があります。誰かが私にこれを手伝うことができるかどうか疑問に思うだけです。私は、JQueryを使ってイベントをOnClickを使わずにバインディングする必要があることを知っていますが、今はOnClicksでこれを達成するための解決策が必要です。Jquery change onclick関数名

多くのありがとうございます!

テーブルのコピー

<table id="driverselectiontable" cellspacing="0"> 
<tr class="chosen" onclick="return driverselect(this, value, value);"> 
<td>driver</td></tr> 
<tr class="odd" onclick="return driverselect(this, value, value);"> 
<td>driver</td></tr> 
<tr class="even" onclick="return driverselect(this, value, value);"> 
<td>driver</td></tr> 
<tr class="chosen" onclick="return driverselect(this, value, value);"> 
<td>driver</td></tr> 
<tr class="even" onclick="return driverselect(this, value, value);"> 
<td>driver</td></tr> 
</table> 

<table id="talentselectiontable" cellspacing="0"> 
</table> 


$("#talentselectiontable").html($("#driverselectiontable .chosen").clone(true).attr("class","odd")); 

だから、基本的に、私は名前のクラスが「選ばれた」持っているテーブルのすべての行をコピーしていますが、そうすることにより、私は「talentselect」に関数呼び出しの名前を変更する必要があります。しかし、テーブルの各行には、PHPで割り当てられた異なるパラメータが解析されています。

私は、コードのこの部分を試してみましたが、それは私があなたのテーブルの実際のHTMLを見ることができないので、これは少し間違っている可能性がありますが、あなたが始める必要があり、まだ

$("#talentselectiontable tr").attr("onclick").replace("driverselect", "talentselect"); 
+0

あなたは十分な情報を掲載していません。そして、はい、そのインラインJavaScriptを取り除く必要があります。 – Sparky

+1

あなたの関数の 'param 'として既に' this'を使っているのなら、なぜ名前を変更する必要がありますか? –

+1

Sparky672が言ったように、私たちはあなたを助けるためにもう少し情報が必要です。具体的には、onclick属性を保持するテーブル行を構成するHTMLを少し見てみるとよいでしょう。理由は、変更が必要な「onclick」がどこにあるのかを知る必要があるからです。 –

答えて

1

が機能していません。

$("#talentselectiontable tr").attr("onclick", "return talentselect(this, value, value);"); 

この問題は、onclick属性をインライン化するのではなく、イベントハンドラを使用すると実際には非常に簡単になります。その後、jQuery live()関数(http://api.jquery.com/live/を参照)を使用すると、JQueryが関数の変更を処理することになります。あなたのソリューションは次のようになります:

$("#driverselectiontable tr").live('click', driverselect); 
$("#talentselectiontable tr").live('click', talentselect); 

そして、あなたのクローンコードが確実に呼び出されるようにするコード。

編集:コメントへの応答では、これがあるように見えるあなたは何をしているの後:あなたが軌道に乗る必要があります

var clickval = $("#talentselectiontable tr").attr("onclick"); 
$("#talentselectiontable tr").attr("onclick", clickval.replace('driverselect', 'talentselect')); 

ただし、JavaScriptの実践を向上させる目的で、別のアプローチをお勧めします。パラメータ値を 'onclick'属性に格納するのではなく、データ属性に格納します。したがって、HTMLは次のようになります。

<table id="driverselectiontable" cellspacing="0"> 
<tr class="chosen" data-myparam1="value" data-myparam2="value"><td>driver</td></tr> 

などです。

function driverselect() { 
    var row = $(this), 
     param1 = row.attr('data-myparam1'), 
     param2 = row.attr('data-myparam2'); 

    // rest of the code goes here 

} 

あなたのマークアップがきれいになり、そして上記のように、あなたはlive() jQueryの機能を使用することができます:あなたは、値を解析するためにjQueryのを使用することができます。

+0

hmmmええ、唯一の問題は、各行のパラメータ値が異なることです。 $( "#talentselectiontable tr")。attr( "onclick")。replace( "driverselect"、 "talentselect"); – user969729

+0

FYI:新しい方法に慣れるはずです... [jQuery '.on()'](http://api.jquery.com/on/) – Sparky

+0

情報のために大変感謝しています。 HTML5データ属性を使用することを考えていますが、IE7、IE8と互換性がありますか?他に何がありますか?種類については – user969729