jquery 1.3.2から1.6.4にアップグレードしたところ、既存のコードの一部が機能していないことがわかりました-
何かを無効にする-
$(selector).attr("disabled","");
ラジオボタンがチェックされているかどうかを確認する-
if($(selector).attr('checked'))
バージョンリリース1.4、1.5、および1.6の下位互換性を確認したところ、問題#2のみが言及されていましたが、上記の問題#1については明示的に言及されていませんでした。そのため、問題1のように、既存のコードでさらに多くの問題を見つけることができるのではないかと心配しています。http://blog.jquery.com/2011/05/03/jquery-16-released/の「データ属性のケースマッピング」セクションで何かを見逃したと思います。誰かが同じことを説明してもらえますか?
ソース-jQuery1.3.2からjQuery1.5(または1.4)へのアップグレード
アップデート
に適切に置き換えることattr
とはまだ少し混乱していprop
ます。.prop()と.attr()およびその他のいくつかの質問を読みました。私がこれまで読んだところはどこでも、ほとんどの場合、そうする必要があると書かれています。しかし、それでは少数派のケースはどれですか?誰かがいくつかのコード例や状況を与えることができますか?既存のコードでそのようなケースを見つけるにはどうすればよいですか?https://stackoverflow.com/a/6057122/351903も読んだことがあります 。
本当に注意する必要があるのは、アプリケーション全体で同じプロパティに対してこれらの使用法を混在させないことです。
現在正常に機能しているそのような回線の場合、attr
に置き換える必要がありますか?prop
$(selector).attr("id")
更新#2
既存のコードに次のような行があるとします(これはUIウィジェットの動作または状態に直接影響すると思います)が、現在、その要素がチェックされているかどうかを確認するチェックはありません-
これはそこにあります
$(selector).attr("checked","checked"); //setting
しかし、これはありません
if($(selector).attr("checked")) //checking
attr
設定が機能しているのにprop
、設定コードでに置き換える必要がありますか?
アップデート#3
UIウィジェットのプロパティに直接影響する属性のリストを取得できる場所はありますか?attrをpropに置き換える属性を決定するのにまだ混乱があります。このjqueryバージョンに不慣れな人は他に同じように感じますか、それとも私は1人だけですか:D?
アップデート#4
これら2つのバージョン(1.3.2から1.6.4)の間のどこかで、jqueryが要素の選択をより厳密にしたようです。
詳細
モジュールには、次のHTMLがあります-
<div id="60table">
<div>
<input type="CHECKBOX" id="60_1" value="1" name="data[reportsInfo][Campaign][2752]">
<label for="60_1">23 apr new campaign 1</label>
</div>
<div>
<input type="CHECKBOX" id="60_2" value="1" name="data[reportsInfo][Campaign][2753]">
<label for="60_2">23 apr new campaign 2</label>
</div>
<div>
<input type="CHECKBOX" id="60_3" value="1" name="data[reportsInfo][Campaign][2707]">
<label for="60_3">2nd camp added</label>
</div>
</div>
jquery 1.3.2では、以下は実際の入力数を返しました-
$("#60table INPUT[type='checkbox']").length
ただし、jquery 1.6.4では、上記は0を返します(入力の位置は#60table> div> inputのようであり、#60tableのすぐ下ではないことに注意してください)。私は $("#60table").find("INPUT[type='checkbox']").length
正しい番号を取得するためにやらなければなりません。
このため、次の既存のコードは、attr
をprop
-に置き換えても、アップグレード後に機能しなくなりました。
$("#60table INPUT[type='checkbox']").attr('checked', $("#60").attr("checked")); //I replaced the attr by prop here
そのため、アップグレード後に古いコードが機能しなくなるという新しい問題がまだ発生しています。
賞金を出す
理由-
要素セレクターロジックが機能しなくなった-機能 していないコードが他にもあるかどうかはわかりません。Update 4を例にとると、入力の位置が、の場合、の
#60table > div > input
ように選択するのは正しくありませんでした$("#60table INPUT[type='checkbox']")
。もしそうなら、壊れているかもしれない私のプロジェクトにあるかもしれない他のいくつかの一般的な間違いがありますか?attrをpropに置き換える場所のより良い説明-attrの代わりにpropを使用する場合と、いくつかの例を使用して、より明確に区別する必要があります。ジョンの答えによると-
UIウィジェットの動作や状態に直接影響する場合は、propを使用してください。それ以外の場合はattrを使用します。
UIウィジェットのプロパティに直接影響する属性のリストはどこで入手できますか