2017-10-23 27 views
0

これは私が今持っているものであり、それは動作しません:jQueryを使用して別の属性の値に基づいて属性を設定できますか?

<script> 
jQuery(function($){ 
    $(document).ready(function(){ 
    $("a").attr('onclick', 'return goog_report_conversion(' + this.attr('href') + ')'); 
    }); 
}); 
</script> 

私が間違って「この」キーワードを使用していますか?

+3

しないでください。実際のイベントハンドラを使用する必要があります。 – SLaks

+2

いいえ、コード行はまだ解釈されていません。したがって、 'this'は' a'がクリックされたことを意味しません。 (もしそれがあなたが参照したかったものであれば) – JustinJmnz

答えて

4

要素内にonclickのインラインを割り当てない場合は、標準のイベントハンドラを使用するだけの理由はありません。あなたはhereの利点についてもっと読むことができます。

私はこれをお勧めしたい:あなたは両方を必要としませんので、

$("a").click(function() { 
    var href = $(this).attr("href"); 
    return goog_report_conversion(href); 
}); 

また、コードのあなたの最初の2行は、同じタスクを実行しています。 (More info here

jQuery(function($){ ... }); 

// OR 

$(document).ready(function() { ... }); 

あなたは動作しませんなぜあなたは迷っている場合:

attr()は独自のthis引数を持っていません。

(上向きにそれをトレース、あなたはスコープが$(document).ready(...)によって定義されている、それは実際に、documentを参照することになり使用しているれているコンテキスト)あなたは、そのように行うためのた場合

hrefではなく、goog_report_conversion()関数を変更して、クリックした要素のパラメータを受け入れる必要があります。 thisは連結されていない文字列に含まれます。渡された要素を使用して、上記の例と同様にhrefを取得します。

function goog_report_conversion(clicked_element) { 
    var href = $(clicked_element).attr("href"); 
    //do something with href 
}); 

$("a").attr("onclick", "return goog_report_conversion(this);"); 

つまり、とは言わないでください。

+1

詳細な答えをありがとう!私はあなたの説明とあなたが含むリンクからたくさんのことを学びました。 – cstoddart

関連する問題