2009-08-05 8 views
2

私は、全体のJavaScriptとjQueryのコードに新しいですが、私は現在、これをやっているが、私のHTMLです:イベントのソース要素を参照する簡単な方法はありますか?

<a id="tog_table0" 
    href="javascript:toggle_table('#tog_table0', '#hideable_table0');">show</a> 

そして私は、要素を微調整するためのいくつかのやや重々しいコードがあります。

function toggle_table(button_id, table_id) { 
     // Find the elements we need 
     var table = $(table_id); 
     var button = $(button_id); 
     // Toggle the table 
     table.slideToggle("slow", function() { 
     if ($(this).is(":hidden")) 
    { 
    button.text("show"); 
    } else { 
     button.text("hide"); 
    } 
    }); 
} 

2つのIDを自分の関数に渡すのではなく、ソース要素を参照するためのより良い方法があるのでしょうか?

答えて

2

イベント内で「this」を使用します。通常、jQueryでは、これはハンドラを呼び出した要素を参照します。

また、インラインスクリプトイベントハンドラをタグで使用しないようにしてください。これらのイベントをドキュメントの準備が整った状態にすることをお勧めします。

NB以下のコードでは、ハンドラ(リンク)を呼び出す要素がテーブルの内部にあるため、最も近いものを使用してそれに移動できます。これは当てはまらない可能性があります。マークアップに応じて、他のトラバリングオプションのいずれかを使用する必要があります。

<a href="" name="#hideable_table0" class="tableHider">show</a> 

をし、これにあなたのjavascriptを変更します:

$(function(){ 
    $('#tog_table0').click(toggle_table) 
}); 

function toggle_table() { 
    //this refers to the element clicked 
    var $el = $(this); 
    // get the table - assuming the element is inside the table 
    var $table = $el.closest('table'); 
    // Toggle the table 
    $table.slideToggle("slow", function() { 
     $el.is(":hidden") ? $el.text("show") : $el.text("hide"); 
    } 
} 
+0

表が怒鳴るですリンクを含むヘッダー。 find()のいくつかのバージョンを使用すると思いますか? – stsquad

1

あなたはこれを行うことができます

$('a.tableHider').click(function() { 
    var table = $(this.name); // this refers to the link which was clicked 
    var button = $(this); 

    table.slideToggle("slow", function() { 
     if ($(this).is(':hidden')) { // this refers to the element being animated 
      button.html('show'); 
     } 
     else { 
      button.html('hide'); 
     } 
    }); 

    return false; 
}); 

編集:クリックに虚偽のリターンをname属性を使用して、コメントを追加する変更スクリプトハンドラ。

+0

うーん、私はそれを働かせるようには見えない。 hrefを深く見ると完全なリンク(http://cgi-bin/myscript.pl#hideable_table0 ")になります。これは、テーブルが正しい要素であることを確認できないことがありますか?また、クリックはページを移動しようとします – stsquad

+0

私の悪い申し訳ありませんが、代わりにname属性を使用するようにスクリプトを更新しました。また、ページスクロールを防ぐためにこの関数はfalseを返します。 – jammus