2011-12-22 11 views
0

#live()またはon()コールバックの中でセレクタに問題があります。live/onを使用するとjQueryオブジェクトメソッドが失敗する

$(document).on('click',".dfield_span_after", function(event) { 
    var in_id = $(this).attr('data-in_id'); 
    var field = $('#'+in_id) // this line 
    field.show(); 
} 

field.show()しかし、このように選択し、全く動作しません:

var field = $('[id='+in_id+']') 
正常に動作します

これはjQueryの問題(いくつかのバージョンが使用された)ですか、それとも私が間違ったことですか?

更新日: このような状況では、この問題は解決しない場合があります。私はコードのように相互作用するいくつかの要素を持つページを持っています。このコードはリンクをクリックする直前に正常に動作し、AJAXによっていくつかの要素が生成され、ポップアップで表示されます。ポップアップの要素が悪くなっても、ページの残りの部分はまだ問題ありません。

おかげ

+0

何かが間違っています。var in_id = $(this)).attr( 'data-in_id'); ' – matino

+0

私のために働く、http://jsfiddle.net/59ayt/ – Andrew

+0

更新をお読みください。 idはajaxで生成されたコンテンツの後にのみ動作します。例えば ​​'console.log(field)'は私に必要な正確な要素を与えてくれるので、 'field.show()'を除くすべてのものはうまくいくようです。 –

答えて

2

[id=theid]もし作品と#theidは、それは通常、あなたのページに重複したIDを持っていることを意味しません。 IDは一意でなければなりません。コメントの

編集

だから、あなたがこれを行う場合:

$(document).on('click',".dfield_span_after", function(event) { 
    var in_id = $(this).attr('data-in_id'); 
    var field = $('#'+in_id) // this line 
    field.show(); 
    alert(field.length); 
    alert($("[id="+in_id+"]").length); 
} 

あなたが得る1の2つの警告?

+0

はい、そうかもしれませんが、このように1つの(!) 'id'だけです。私は 'data-in_id'値をコピーしてそれを検索し、必要な要素の' id'を1つだけ取得しました。わからないのですが、 'data-in_id'属性自体に別の一致がないのはなぜですか?そして、はい、彼らは平等です、私はそれをチェックしました。 –

+0

重複したid = "in_id"を持つ要素を探します。in_idは実際の値です。これは良いテストです: 'alert($(" [id = "+ in_id +"] ")。)length);'重複がなければ '1 'に警告します。 –

+0

ケビン、私はすでにそれをチェックしています、それは1です。そして、私は '$("# "+ in_id")で選択されたこの要素をコンソールで見ることができますが、**何も**できません!属性を変更することはできません。表示できません。非表示にすることはできません。何もしません。しかし、この現象はajaxで生成された要素にのみ発生することに注意する必要があります –

関連する問題