2012-01-29 17 views
5

現在の要素のIDを警告するために次のコードを使用しています。現在の要素のアラートID

<input type="text" id="desc" name="txtTitle" onclick="fun()"> 

jqueryの:

function fun() { 
    var currentId = $(this).attr('id'); 
    alert(currentId); 
} 

なぜそれが "未定義" 警告していますか? 私は試してみました:

var currentId =$('element').attr('id'); 
// and 
alert($(this).id); 
// and 
alert(this.id); 

が、それはそれを変更してみてくださいundefined

+1

jQueryを使用してonclickハンドラを追加した場合は、これを尋ねることはありません。 :) – epascarello

答えて

4

に警告:あなたはとにかくそれを使用していることから、jQueryを使ってあなたのイベントハンドラをバインドし、

<input type="text" id="desc" name="txtTitle" onclick="fun.call(this)"> 

ベター:

$(function() { $('#desc').click(fun); }); 

あなたのコードがうまくいかない理由あなたは "onclick"属性のためにブラウザによって構築されたイベントハンドラ関数の中からfun()と呼んでいます。そのような関数を呼び出すだけで、 "受信者"オブジェクトは提供されません— thisには何もありません。あなたが.call()でそれを呼び出すなら、それを明示的に行うことができます。

1

文字列をonclickイベントに渡すと、その文字列のコードは実行される関数になります。別の関数を呼び出すと、thisは定義されません。

のいずれかが文書に準備

$("#desc").click(fun) 

を行う、またはあなたは、引数としてインラインイベント、 パス thisで作業しなければならない場合には先のとがっによって示された方法を使用します。

9

$(this)はjQuery関数内でのみ動作します。 fun()の中には何も参照しません。それはあなたのHTML内onClick=""属性、上記したがって$.click()機能を持っている、特に良い方法はありません

<input type="text" id="desc" name="txtTitle"> 

:このHTMLで

$('input#desc').click(function() { 
    alert($(this).attr('id')); 
}); 

:代わりに、これを試してみてください。 JavaScriptを別のファイルに置く必要があります(特にjQueryを使用する場合)。

1

変更言うべき要素:

onclick="fun(this)" 

と機能へ:

function fun(elem) 
{ 
    var currentId = $(elem).attr("id"); 
} 
0

あなたはグローバルスコープでthisと呼ばれるためです。jQueryを使って

<input type="text" id="desc" name="txtTitle" onclick="fun(this)"> 

function fun(el) { 
    alert(el.id); 
} 

を、あなたは以下のように行うことができます:あなたが以下のように行うことができますjQueryをなし

<input type="text" id="desc" name="txtTitle"> 

$(function(){ 
    $('input[type="text"]').click(function(){ 
     alert(this.id); 
    }); 
}); 
2

ただあなただけalert(event.target.id);を使用することができます

alert($(this).attr('id')); 
1

を使用関数に引数を渡すことなく要素によって呼び出される関数の内部

関連する問題